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
Nowoczesny sposób jest z klasami java.time wbudowanych w Java 8 i późniejszych. Duża część funkcji została przeniesiona do Java 6 & 7 w projekcie ThreeTen-Backport.
ZoneOffset offset = ZoneOffset.ofHours(14); // fourteen hours ahead of UTC.
Analizować ciąg jako LocalDateTime
gdyż brakuje jakichkolwiek informacji o przesunięcie lub strefy. Dane wejściowe są w standardowym formacie ISO 8601, więc nie trzeba określać wzorca formatowania.
LocalDateTime ldt = LocalDateTime.parse("2016-12-21T07:48:36");
Zastosuj przesunięcie do lokalnej daty i godziny, aby uzyskać obiekt OffsetDateTime
.
OffsetDateTime odt = ldt.atOffset(offset);
tym, wyodrębnić Instant
która jest zawsze w UTC.
Instant instant = odt.toInstant();
instant.toString(): 2016-12-20T17: 48: 36Z
W UTC wartość jest inna data, 20. zamiast 21.
Zobacz live code at IdeOne.com.
O java.time
Ramy java.time jest wbudowana w Java 8 i późniejszych. Te klasy zastępują kłopotliwe stare klasy dat-czasu, takie jak java.util.Date
, Calendar
, & SimpleDateFormat
.
Projekt Joda-Time, teraz w maintenance mode, zaleca migrację do klas java.time. Aby uzyskać więcej informacji, zobacz
. I wyszukaj Stack Overflow dla wielu przykładów i objaśnień. Specyfikacja to JSR 310.
Używanie JDBC driver zgodny z JDBC 4.2 lub później, można wymieniać java.time obiekty bezpośrednio z bazy danych. Nie ma potrzeby ciągi ani klas java.sql. *.
Gdzie można uzyskać lekcje java.time?
- Java SE 8, Java SE 9, a później
- wbudowanej.
- Część standardowego interfejsu API języka Java z pakietem implementacji.
- Java 9 dodaje kilka drobnych funkcji i poprawek.
- Java SE 6 i Java SE 7
- Znaczna część funkcjonalności java.time jest back-przeniesiony do Java 6 & 7 w ThreeTen-Backport.
- Android
- Późniejsze wersje Androida wdrożeń wiązce klas java.time.
- Dla wcześniejszego systemu Android projekt ThreeTenABP dostosowuje ThreeTen-Backport (wymieniony powyżej). Zobacz How to use ThreeTenABP….
Projekt ThreeTen-Extra rozciąga java.time z dodatkowych zajęć. Ten projekt jest poligonem wskazującym na możliwe przyszłe dodatki do java.time. Możesz znaleźć tutaj kilka użytecznych klas, takich jak Interval
, YearWeek
, YearQuarter
i more.
Twój problem polega na tym, że użyłeś nieobsługiwanego "UTC + 14". getTimeZone zna tylko formularz "GMT + xx" – Sxilderik
Skąd otrzymałeś przesunięcie ** + 14 **? –