2013-03-06 19 views

Odpowiedz

22

można uzyskać strefa czasowa przesunięcie sformatowany jak +01:00 z SimpleDateFormat w Java 7 (yyyy-MM-dd'T'HH:mm:ss.SSSXXX) lub z Joda „s DateTimeFormat (yyyy-MM-dd'T'HH:mm:ss.SSSZZ).

+2

Czy jest sposób dla starszych javas bez jody? – Karussell

+1

Zobacz: http://stackoverflow.com/questions/13040143/generic-support-for-iso-8601-format-in-java-6 –

+1

Uważam, że format jest z "HH", np. Rrrr-MM-dd'T "HH: mm: ss.SSSXXX; ponieważ "hh" wytworzy 00-12, a "HH" 00-23. Również z innego pytania związanego z SO. – Leo

1

Oto odpowiedź na 2017 rok. Jeśli istnieje jakikolwiek sposób, który możesz (który jest), wyrzuć nieaktualne klasy, takie jak SimpleDateFormat za burtę, i korzystaj z nowoczesnych i wygodniejszych zajęć w java.time. W szczególności żądanym formacie 2012-11-25T23:50:56.193+01:00 zgodny z ISO 8601, a więc wychodzi z pudełka z nowszych klas, wystarczy użyć OffsetDateTime.toString():

OffsetDateTime time = OffsetDateTime.now(); 
    System.out.println(time.toString()); 

Drukuje coś

2017-05-10T16:14:20.407+02:00 

jedna rzecz może, ale nie musi, być świadomym, jednak drukuje tyle grup po 3 miejsc po przecinku, ile sekund zajmuje wydrukowanie precyzji w obiekcie OffsetDateTime. Najwyraźniej na moim komputerze "teraz" pochodzi z dokładnością do milisekund (sekundy z trzema miejscami dziesiętnymi).

Jeśli masz staroświecki obiekt Date, na przykład, masz go z połączenia z pewną starszą metodą, polecam pierwszą rzeczą, którą zrobisz, jest przekonwertowanie go na Instant, która jest jedną z nowoczesnych klas. Z tego miejsca możesz z łatwością dokonywać innych konwersji w zależności od wymagań:

Date now = new Date(); 
    OffsetDateTime time = now.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime(); 
    System.out.println(time.toString()); 

Naprawdę generuję więcej konwersji niż to konieczne. atZone(ZoneId.systemDefault()) wyprodukowała ZonedDateTime, a jego toString() nie zawsze da ci format, o którym mówisz, że chciałeś; ale można go łatwo sformatować:

ZonedDateTime time = now.toInstant().atZone(ZoneId.systemDefault()); 
    System.out.println(time.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); 
Powiązane problemy