tl; dr
LocalDateTime.parse(
"2018-01-23 01:23:45".replace(" " , "T")
).plusHours(2)
java.time
L'approche moderne utilise le java.time classes ajoutées à Java 8, Java 9, et plus tard.
utilisateur entre dans le format AAAA-MM-JJ HH: MM: SS
Parse cette chaîne d'entrée en un objet DateTime. Votre format est proche de la conformité au format ISO 8601 standard, utilisé par défaut dans les classes java.time pour analyser/générer des chaînes. Pour se conformer pleinement, remplacez l'espace au milieu avec un T
.
String input = "2018-01-23 01:23:45".replace(" " , "T") ; // Yields: 2018-01-23T01:23:45
Parse comme LocalDateTime
étant donné que votre entrée n'a pas un indicateur de fuseau horaire ou offset de-UTC.
LocalDateTime ldt = LocalDateTime.parse(input) ;
ajouter deux heures
Les classes java.time peuvent faire le calcul pour vous.
LocalDateTime twoHoursLater = ldt.plusHours(2) ;
Time Zone
Sachez qu'un LocalDateTime
ne fait pas représentent un moment, un point sur la timeline. Sans le contexte d'un fuseau horaire ou offset-from-UTC, il n'a aucune signification réelle. La partie "Local" du nom signifie localité ou localité plutôt qu'une localité particulière. Le simple fait de dire "midi le 21 janvier" pourrait signifier midi à Auckland, en Nouvelle-Zélande, ce qui arrive plusieurs heures avant midi à Paris en France.
Pour définir un moment réel, vous devez spécifier une zone ou un décalage.
ZoneId z = ZoneId.of("Africa/Tunis") ;
ZonedDateTime zdt = ldt.atZone(z) ; // Define an actual moment, a point on the timeline by giving a context with time zone.
Si vous connaissez le fuseau horaire prévu pour certains, l'appliquer avant d'ajouter les deux heures. La classe LocalDateTime
suppose des jours génériques de 24 heures simples lors du calcul. Mais dans divers fuseaux horaires à diverses dates, les jours peuvent être de 23 ou 25 heures, ou peuvent être d'autres longueurs.Ainsi, pour des résultats corrects dans un contexte zoné, ajoutez les heures à votre ZonedDateTime
au lieu de LocalDateTime
.
A propos java.time
Le cadre java.time est construit en Java 8 et versions ultérieures. Ces classes supplantent les vieilles classes legacy de date-heure gênantes telles que java.util.Date
, Calendar
, & SimpleDateFormat
. Le projet Joda-Time, maintenant en maintenance mode, conseille la migration vers les classes java.time.
Pour en savoir plus, voir le Oracle Tutorial. 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, Java SE 9, et plus tard
- 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 Java SE 7
- Une grande partie de la fonctionnalité de java.time est de retour à Java 6 Ported .
- Android
- Les versions ultérieures de mises en œuvre bundle Android des classes java.time.
- Pour Android plus tôt, le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir How to use ThreeTenABP….
Le projet ThreeTen-Extra java.time étend avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez trouver ici des classes utiles telles que Interval
, YearWeek
, YearQuarter
et more.
Mal interprété comme "stardate". Je n'aime même pas * Star Trek. –