tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
Utilisez les excellentes classes java.time pour le travail date-heure. Ces classes remplacent les anciennes classes de date-heure gênantes telles que java.util.Date
et java.util.Calendar
.
ISO 8601
Les classes java.time utilisent par défaut les formats ISO 8601 standard pour analyser / générer des chaînes de valeurs date-heure. Pour rendre votre chaîne d'entrée conforme, remplacez l'ESPACE au milieu par un T
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analysez votre chaîne d'entrée en tant que LocalDateTime
car elle ne contient aucune information sur le fuseau horaire ou le décalage par rapport à UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Ajoutez dix minutes.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
Voir le code en direct sur IdeOne.com .
Cela LocalDateTime
n'a pas de fuseau horaire, donc cela ne représente pas un point sur la chronologie. Appliquez un fuseau horaire pour traduire à un moment réel. Indiquez un nom de fuseau horaire approprié dans le format continent/region
, tels que America/Montreal
, Africa/Casablanca
ou Pacific/Auckland
, ou Asia/Karachi
. N'utilisez jamais l'abréviation de 3 à 4 lettres telle que EST
ou IST
ou PKT
car ce ne sont pas de vrais fuseaux horaires, ni standardisés, ni même uniques (!).
ZonedDateTime
Si vous connaissez le fuseau horaire prévu pour cette valeur, appliquez a ZoneId
pour obtenir un ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]
Anomalies
Pensez à ajouter ces dix minutes avant ou après l'ajout d'un fuseau horaire. Vous pouvez obtenir un résultat très différent en raison d'anomalies telles que l'heure d'été (DST) qui décalent l' heure de l'horloge murale .
Le fait d'ajouter les 10 minutes avant ou après l'ajout de la zone dépend de la signification de votre scénario et de vos règles métier.
Conseil: lorsque vous prévoyez un moment spécifique sur la chronologie, conservez toujours les informations de fuseau horaire . Ne perdez pas ces informations, comme vous l'avez fait avec vos données d'entrée. La valeur est-elle 12:34
censée être midi au Pakistan ou midi en France ou midi au Québec? Si vous vouliez dire midi au Pakistan, dites-le en incluant au moins le décalage par rapport à UTC ( +05:00
), et mieux encore, le nom du fuseau horaire ( Asia/Karachi
).
Instant
Si vous voulez le même moment vu à travers l'objectif de UTC , extrayez un fichier Instant
. La Instant
classe représente un moment sur la chronologie en UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).
Instant instant = zdt.toInstant();
Convertir
Évitez les anciennes classes de date-heure gênantes autant que possible. Mais si vous le devez, vous pouvez convertir. Appel de nouvelles méthodes ajoutées aux anciennes classes.
java.util.Date utilDate = java.util.Date.from( instant );
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers java.time.
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
- Java SE 8 et SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .