2015-08-26 18 views
8

'u kullanarak kısa zaman dilimi adını görüntüleyin Aşağıdaki DateTimeFormatter ürününe sahibim.DateTimeFormatter

DateTimeFormatter DATE_TIME_FORMATTER = 
    DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a zzzz"); 

Böyle bir ZonedDateTime biçimlendirmek için onu kullanıyorum:

09/16/2015 at: Aşağıdaki gibi biçimlendirilmiş bir tarih dizesi çıkışına için bu istiyoruz

ZonedDateTime disableTime = Instant.now() 
     .plus(Duration.ofDays(21)) 
     .atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(-5))); 
System.out.println(DATE_TIME_FORMATTER.format(disableTime)); 

13:15:45 EDT

Ama ne çıktı oluyor şudur: 1: 01 de

09/16/2015 17:45 UTC-05: 00

ben desende z, zz, zzz veya zzzz kullanmak olursa olsun, her zaman yukarıda biçiminde çıkış alır.

ZonedDateTime'u oluşturmak istediğiniz çıktıyı verecek farklı bir yol var mı, yoksa desende yanlış bir şey mi yapıyorum? z örneğin Eastern Daylight Time veya EDT olarak, zaman dilimi adını görüntülemek için kullanılması gereken süre DateTimeFormatterdocumentation uyarınca

, O lokalize bölgeyi kaçıklığı, örneğin UTC-05:00 olarak göstermek için kullanılır.

cevap

6

Bunun nedeni, anonim bir UTC ofsetini kullanmanızdır. adlandırılmış ZoneId yerine

ZonedDateTime disableTime = Instant.now() 
    .plus(Duration.ofDays(21)) 
    .atZone(ZoneId.of("Africa/Nairobi")); 

baskılar (italyan lokalize isimleri olan "Ora dell'Africa orientale")

09/16/2015 at 09:34:44 PM Ora dell'Africa orientale 

depolamak için kullanması gereken mevcut adlarının bir listesini alabilirsiniz ve ile deneyin Kullanıcıdan tercihleri ​​

+0

ile aldım. ZoneId.of ("America/New_York") 'kullandım ve bana istenen sonucu verdi. Teşekkür ederim! –

+0

java.time paketinin "ZoneId.ofOffset (" UTC ", ZoneOffset.ofHours (-5))' i tanımamasının bir nedeni var mı "ZoneId.of (" America/New_York ")' ile eşdeğerdir? Yoksa eşdeğer değiller mi? –

+0

Ah, nevermind. Çünkü ZoneId.ofOffset ("UTC", ZoneOffset.ofHours (-5)) "her zaman bir UTC-05: 00 ofsetine sahip olurken, ZoneId.of (" America/New_York) "UTC-05 arasında değişecektir: 00 ve UTC-04: 00, gün ışığından yararlanma saatine göre, bu yüzden eşdeğer değiller. Şimdi mantıklı geliyor –

İlgili konular