2013-10-30 21 views
1

我正在尋找一種方法來獲取基於用戶輸入的各種時區中的當前時間。我知道我可以使用Joda Time!但這是唯一的方法嗎?在Java中使用各種日曆TimeZone(不使用喬達時間)

Java中沒有這樣的選項嗎?我嘗試了下面的代碼,它爲所有3個系統輸出提供相同的輸出。

Calendar pst = Calendar.getInstance(TimeZone.getTimeZone("PST")); 
System.out.println("PST " + pst.getTime()); 
Calendar ist = Calendar.getInstance(TimeZone.getTimeZone("Asia/Calcutta")); 
System.out.println("IST " + ist.getTime()); 
Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("Etc/UTC")); 
System.out.println("UCT " + utc.getTime()); 

我在這裏錯過了什麼來獲得其他時區的當前時間?

+0

對於它的價值,我認爲對於很多用例,應該考慮使用JodaTime並不是因爲它具有Java不具備的功能,而是因爲Java日曆/日期等。 API很難正確使用,至多。 – CmdrMoozy

+1

我們中的一些人受到我們環境中的內部限制的制約,並沒有在Joda時間罐中放棄奢侈。真的很期待JDK 8.我知道它將有一個基於Joda Time的新Java Time API。這是JSR 310. – vincentvanjoe

回答

6

是的,這將顯示在任何情況下相同的值(或除毫秒),因爲這三個日曆都指的是同一個時間瞬間(執行時間仍然),這一切,一個java.util.Date代表。這是Calendar.getTime()的結果。

然而,Calendar本身瞭解時區,這將反映在使用Calendar.get等,這將當您使用SimpleDateFormat,在那裏你可以指定一個特定的時間段也使用。

// Specify whatever format you want - bear in mind different locales etc 
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
format.setTimeZone(calendar.getTimeZone()); 
String text = format.format(calendar.getTime()); 

目前尚不清楚你想要什麼做的,但基本上你需要知道它的類型是時區知道,哪些不是。瞭解java.util.Date沒有格式,日曆系統或時區非常重要:它是只是自Unix紀元以來的毫秒數。

+0

感謝您的迴應。我正試圖在各個時區獲得當前時間。例如:印度,德國,美國(當地時間)。 –

+1

@AnanthChelladurai:但是那個時候你想做什麼?你已經*在那個時間顯示的代碼中,在'日曆'對象中 - 這就是你從每個對象中提取一個'Date'。 –

+0

我正在嘗試爲不同時區的用戶創建多個訂單。例如:德國用戶1份,印度用戶1份。訂單1和訂單2的創建日期時間應該位於其各自的時區中。 –

1

正如喬恩指出的方法getTime()正在返回一個java.util.Date對象,這只是一個毫秒值,而不是時區知道。

如果你只是在印刷時代,那麼你可以使用日曆和手動得到你想要像

System.out.println(utc.get(Calendar.HOUR_OF_DAY) + ":" + utc.get(Calendar.MINUTE)) 

領域這將需要一些格式化一分鐘< 10顯示0

+0

或者你可以使用'SimpleDateFormat',已經爲此目的而發明的輪子... –

+0

@DavidWallace:我希望能夠在評論中編輯:「我說你想說的一切,只是在你做...之前「,但是不管怎樣,把它放在你的前面;) –