2010-01-18 17 views

Respuesta

10

Utilizando el standard API:

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

los nuevos DateTimeFormatter casos son inmutables y se puede utilizar como variables estáticas.

Uso de la antigua API estándar:

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

Dado que SimpleDateFormat no es seguro para subprocesos, diría que la manera más directa es usar Joda Time en su lugar. A continuación, puede crear una sola formateador (llamando withZone(DateTimeZones.UTC) para especificar que desea GMT) y ya está:

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

... 

String result = formatter.print(instant); 

Esto tiene el otro beneficio que se puede utilizar Joda Time otras partes de su código, que es siempre una buena cosa :)

+0

gracias. buena información. – pstanton

+0

@ John Skeet ¿En qué medida es relevante la seguridad de subprocesos en este caso? Tengo el tiempo en ms y necesito convertirlo a una cadena UTC con un formato específico. ¿La respuesta de McDowells no es correcta? – AgentKnopf

+0

@Zainodis: Está bien si está contento de crear un nuevo 'DateFormat' cada vez. Personalmente, prefiero el enfoque de Joda Time, diablos, en parte porque Joda Time es simplemente una API mucho más agradable. –

Cuestiones relacionadas