2010-01-18 2 views

Antwort

10

Mit dem standard API:

Instant now = Instant.now(); 
String result = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG) 
           .withZone(ZoneId.of("GMT")) 
           .format(now); 
System.out.println(result); 

die neuen DateTimeFormatter Instanzen sind unveränderlich und kann als statische Variablen verwendet werden.

Mit dem alten Standard-API:

TimeZone gmt = TimeZone.getTimeZone("GMT"); 
DateFormat formatter = DateFormat.getTimeInstance(DateFormat.LONG); 
formatter.setTimeZone(gmt); 
System.out.println(formatter.format(new Date())); 
8

Da SimpleDateFormat nicht thread-sicher ist, würde ich sagen, dass der sauberste Weg ist, stattdessen Joda Time zu verwenden. Dann können Sie einen einzelnen Formatierer (Aufruf withZone(DateTimeZones.UTC) angeben, dass Sie UTC möchten) erstellen und Sie sind weg:

private static DateTimeFormatter formatter = DateTimeFormat.forPattern(...) 
    .withZone(DateTimeZone.UTC); 

... 

String result = formatter.print(instant); 

Dies hat den weiteren Vorteil, dass Sie an anderer Stelle Joda Zeit in Ihrem Code verwenden können, die immer eine gute Sache :)

+0

danke. gute Info. – pstanton

+0

@John Skeet Inwieweit ist Thread-Safety in diesem Fall relevant? Ich habe die Zeit in ms und ich muss es in eine UTC-Zeichenfolge mit einem bestimmten Format konvertieren. Ist McDowells Antwort nicht korrekt? – AgentKnopf

+0

@Zainodis: Es ist in Ordnung, wenn Sie jedes Mal ein neues 'DateFormat' erstellen. Persönlich bevorzuge ich jedoch die Joda Time-Methode - zum Teil, weil Joda Time einfach eine viel schönere API ist. –

Verwandte Themen