2010-01-18 30 views
6

Başka nedenlerden dolayı yerel saat dilimim altında çalışması gereken bir program var, ama bir yordam için GMT'de bir SimpleDateFormat kullanarak çıkış tarihleri ​​gerekir.biçimi GMT/UTC zaman olarak

Bunu yapmanın en iyi yolu nedir?

+0

hangi Yerel ayar kullanma: Eski standart API kullanarak

? – skaffman

+0

, alakasız. – pstanton

cevap

10

kullanma standard API:

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

yeni DateTimeFormatter örneklerini iletmenin ve statik değişkenler olarak kullanılabilir.

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

SimpleDateFormat'un diş güvenliğini sağlamadığı göz önüne alındığında, en ince yolun bunun yerine Joda Time kullanmak olduğunu söyleyebilirim. Sonra tek bir biçimlendirici (eğer UTC istediğinizi belirtmek için withZone(DateTimeZones.UTC) arayarak) oluşturabilir ve dışarıda olduğunu:

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

... 

String result = formatter.print(instant); 

Bu, her zaman olduğunu kodunuzda, başka bir yerde Joda Zaman kullanabileceğiniz diğer yararı vardır iyi bir şey :)

+0

teşekkürler. iyi bilgi. – pstanton

+0

@John Skeet İplik Güvenliği bu durumda ne kadar önemlidir? Ms cinsinden vaktim var ve onu belirli bir formatta bir UTC String'e dönüştürmem gerekiyor. McDowells cevabı doğru değil mi? – AgentKnopf

+0

@Zainodis: Her seferinde yeni bir 'DateFormat 'yaratmaktan memnunsanız iyi olur. Şahsen Joda Time yaklaşımını tercih ediyorum - heck, kısmen Joda Time sadece çok daha güzel bir API. –