Eu tenho este objeto de data:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
valor de d1 é Fri Jan 07 17:40:00 PKT 2011
Agora estou tentando adicionar 10 minutos à data acima.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Valor das newTime
mudanças, 2011-50-07 17:50
mas deveria ser 07-01-2011 17:50
.
Ele adiciona minutos corretamente, mas também muda de mês, não sei por quê!
java
date
calendar
simpledateformat
java.util.date
Junaidp
fonte
fonte
Respostas:
O problema para você é que você está usando
mm
. Você deve usarMM
.MM
é para mês emm
é para minutos. Tente comyyyy-MM-dd HH:mm
Outra abordagem:
Pode ser tão simples quanto isto (outra opção é usar o tempo joda )
fonte
você pode usar a classe DateUtils no pacote org.apache.commons.lang3.time
fonte
org.apache.commons.lang.time.DateUtils
Método de conveniência para implementar a resposta de @Pangea:
fonte
Para evitar qualquer dependência, você pode usar java.util.Calendar da seguinte forma:
No Java 8, temos uma nova API:
fonte
Isso está especificado incorretamente:
Você está usando minutos em vez de mês (MM)
fonte
tl; dr
java.time
Use as excelentes classes java.time para trabalho de data e hora. Essas classes substituem as antigas classes problemáticas de data e hora, como
java.util.Date
ejava.util.Calendar
.ISO 8601
As classes java.time usam formatos ISO 8601 padrão por padrão para analisar / gerar strings de valores de data e hora. Para que sua string de entrada esteja em conformidade, substitua o ESPAÇO no meio por a
T
.LocalDateTime
Analise sua string de entrada como um,
LocalDateTime
pois ela não possui informações sobre fuso horário ou deslocamento do UTC.Adicione dez minutos.
Veja o código ao vivo em IdeOne.com .
Isso
LocalDateTime
não tem fuso horário, então não representa um ponto na linha do tempo. Aplique um fuso horário para traduzir para um momento real. Especifique um nome próprio fuso horário no formatocontinent/region
, comoAmerica/Montreal
,Africa/Casablanca
, ouPacific/Auckland
, ouAsia/Karachi
. Nunca utilize o 3-4 letras, comoEST
ouIST
ouPKT
como eles são não zonas verdadeiros tempo, não padronizados, e nem mesmo única (!).ZonedDateTime
Se você souber o fuso horário pretendido para este valor, aplique a
ZoneId
para obter aZonedDateTime
.Anomalias
Pense em adicionar esses dez minutos antes ou depois de adicionar um fuso horário. Você pode obter um resultado muito diferente por causa de anomalias como o horário de verão (DST) que altera o horário do relógio de parede .
Se você deve adicionar 10 minutos antes ou depois de adicionar a zona, depende do significado de seu cenário de negócios e regras.
Dica: quando você pretende um momento específico na linha do tempo, sempre mantenha as informações de fuso horário . Não perca essa informação, como acontece com seus dados de entrada. O valor
12:34
significa meio-dia no Paquistão, meio-dia na França ou meio-dia em Québec? Se você quis dizer meio-dia no Paquistão, diga isso incluindo pelo menos o deslocamento do UTC (+05:00
) e, melhor ainda, o nome do fuso horário (Asia/Karachi
).Instant
Se você deseja o mesmo momento visto pelas lentes do UTC , extraia um
Instant
. AInstant
classe representa um momento na linha do tempo em UTC com uma resolução de nanossegundos (até nove (9) dígitos de uma fração decimal).Converter
Evite as velhas classes problemáticas de data e hora sempre que possível. Mas se for preciso, você pode se converter. Chame novos métodos adicionados às classes antigas.
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como
java.util.Date
,Calendar
, eSimpleDateFormat
.o projeto Joda-Time , agora em modo de manutenção , aconselha a migração para java.time.
Para saber mais, veja o Tutorial Oracle . E pesquise no Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
Há um erro no padrão do seu SimpleDateFormat. deveria ser
fonte
use este formato,
mm para minutos e MM para mês
fonte
Depois de analisar a data, uso esta função de utilidade para adicionar horas, minutos ou segundos:
Tenha cuidado ao adicionar longos períodos de tempo, 1 dia nem sempre é 24 horas (ajustes do tipo horário de verão, segundos intercalados e assim por diante),
Calendar
é recomendado para isso.fonte
Trabalhe para mim DateUtils
...
fonte
Pode ser feito sem as constantes (como 3600000 ms é 1h)
exemplo de uso:
fonte
Apenas para quem está interessado. Eu estava trabalhando em um projeto iOS que exigia funcionalidade semelhante, então terminei de portar a resposta de @jeznag para o swift
fonte