2017-03-22 38 views
0

我想從給定的時區獲得當前時間,可以像「IST」或「印度標準時間」等。 當輸入爲「印度標準時間」或「協調世界時」時,我無法獲得時間。它只適用於「IST」或「UTC」或「EST」等。 我已經嘗試過Joda-Time和SimpleDateFormat。如何從java中給定的時區名稱獲取當前時間?

SimpleDateFormat sd = new SimpleDateFormat(
      "yyyy.MM.dd G 'at' HH:mm:ss z"); 
Date date = new Date(); 
sd.setTimeZone(TimeZone.getTimeZone("IST")); 
System.out.println(sd.format(date)); 



DateTime now = new DateTime(); 
//DateTimeZone LDateTimeZone = DateTimeZone.forID("Asia/Kolkata"); 
DateTimeZone LDateTimeZone = DateTimeZone.forID("IST"); //deprecated 
System.out.println("Joda-Time zone: " + now.toDateTime(LDateTimeZone)); 

有沒有辦法處理這兩個輸入?

+0

始終使用全IANA時區信息數據庫的名字 - '亞洲/ Kolkata'。縮寫不是唯一的(印度/以色列/愛爾蘭?),人性化名稱是語言/地區特定的。 –

回答

2

我不能更強烈地反對使用傳統java.util.Date。您應該使用相應的java.time類。

java.time.ZonedDateTime中,您可以創建一個時區別名地圖並隨意填寫它。這並不漂亮,但它的工作原理。

Map<String, String> aliasMap = new HashMap<>(); 
aliasMap.put("IST", "Asia/Calcutta"); 
aliasMap.put("Indian Standard Time", "Asia/Calcutta"); 
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Indian Standard Time", aliasMap)); 
+0

毫無疑問,它是處理這種情況的好方法,但在我的情況下,我需要所有的時區。我很難對所有可用的時區進行硬編碼。 –

+0

[Here](http://www.javadb.com/list-possible-timezones-or-zoneids-in-java/)是Java本機支持的所有'ZoneId'的列表。這應該可以幫助您創建所需的別名映射。 –

+0

更好的參考是[here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。 Java中有一些不在該列表中,但這些應該被視爲棄用。 –

0

我認爲你可以像這樣使用喬達

TimeZone timezone; 
timezone = TimeZone.getTimeZone("Indian Standard Time"); 
DateTime dt = new DateTime(new Date()); 
DateTimeZone dtZone = DateTimeZone.forTimeZone(timezone); 
DateTime afterSetTimezone = dt.withZone(dtZone); 
Date date = afterSetTimezone.toLocalDateTime().toDate(); 
System.out.println(date); 
+0

對不起,TimeZone.getTimeZone(「」)函數只支持IST或UTC這樣的短名稱,因爲我已經附上了代碼和我的問題。它不適用於TimeZone.getTimeZone(「印度標準時間」)。 –

相關問題