2010-01-18 2 views

risposta

10

Utilizzando la standard API:

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

I nuovi DateTimeFormatter istanze sono immutabili e possono essere utilizzati come variabili statiche.

Utilizzando la vecchia API standard:

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

Dato che SimpleDateFormat non è thread-safe, direi che il modo più semplice è utilizzare Joda Time. Quindi è possibile creare un unico formattatore (chiamando withZone(DateTimeZones.UTC) per specificare che si desidera UTC) e tu sei via:

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

... 

String result = formatter.print(instant); 

Questo ha l'altro vantaggio che è possibile utilizzare Joda Ora altrove nel codice, che è sempre una buona cosa :)

+0

grazie. buone informazioni – pstanton

+0

@John Skeet In che misura il thread-safety è rilevante in questo caso? Ho il tempo in ms e ho bisogno di convertirlo in una stringa UTC con un formato specifico. La risposta di McDowells non è corretta? – AgentKnopf

+0

@Zainodis: Va bene se sei felice di creare ogni volta un nuovo 'DateFormat'. Personalmente preferisco l'approccio Joda Time - diamine, in parte perché Joda Time è semplicemente un'API molto più carina. –