tl; dr
LocalDateTime.parse("2016-12-21T07:48:36") // Parse as a `LocalDateTime` given the lack of an offset or zone. *Not* an actual moment, only a rough approximation of potential moments along a range of about 26-27 hours.
.atOffset(ZoneOffset.ofHours(14)) // Assign an offset-from-UTC as context, giving meaning to determine an actual point on the timeline.
.toInstant() // Renders `Instant` object in UTC.
java.time
La façon moderne est avec les classes Java java.time intégrées dans 8 et versions ultérieures. Une grande partie des fonctionnalités est reportée sur Java 6 & 7 dans le projet ThreeTen-Backport.
ZoneOffset offset = ZoneOffset.ofHours(14); // fourteen hours ahead of UTC.
Parse la chaîne comme LocalDateTime
car il manque toute information au sujet de décalage ou d'une zone. Votre entrée est au format standard ISO 8601, il n'est donc pas nécessaire de spécifier un formatage.
LocalDateTime ldt = LocalDateTime.parse("2016-12-21T07:48:36");
appliquer le décalage à la date-heure locale pour obtenir un OffsetDateTime
un objet.
OffsetDateTime odt = ldt.atOffset(offset);
De là, un extrait Instant
qui est toujours en UTC.
Instant instant = odt.toInstant();
instant.toString(): 2016-12-20T17: 48: 36Z
En UTC, la valeur est une autre date, le 20 au lieu du 21.
Voir live code at IdeOne.com.
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 plus d'informations, voir le Oracle Tutorial. Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310.
L'utilisation d'un JDBC driver conforme à JDBC 4.2 ou tard, vous pouvez échanger java.time objets directement avec votre base de données. Pas besoin de chaînes ni de classes java.sql. *.
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.
Vous savez que votre problème est seulement que vous avez utilisé le "UTC + 14" non pris en charge. getTimeZone ne connaît que le formulaire "GMT + xx" – Sxilderik
D'où avez-vous obtenu le décalage ** + 14 **? –