tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
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
e java.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
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "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.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Adicione dez minutos.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
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 formato continent/region
, como America/Montreal
, Africa/Casablanca
, ou Pacific/Auckland
, ou Asia/Karachi
. Nunca utilize o 3-4 letras, como EST
ou IST
ou PKT
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 a ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Ásia / Karachi]
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 umInstant
. A Instant
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).
Instant instant = zdt.toInstant();
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.
java.util.Date utilDate = java.util.Date.from( instant );
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, comojava.util.Date
, Calendar
, e SimpleDateFormat
.
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?
- Java SE 8 e SE 9 e posterior
- Construídas em.
- Parte da API Java padrão com uma implementação agrupada.
- Java 9 adiciona alguns recursos e correções menores.
- Java SE 6 e SE 7
- Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
- Android
- O ThreeTenABP projeto adapta ThreeTen-Backport (mencionado acima) para o Android especificamente.
- Veja como usar… .
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 .