2012-09-19 137 views
0

好吧,我知道這個問題在很多地方都被問過很多次,但是我還沒有得到這個工作。我試過java.util.Date以及JodaTime API。任何時區的當前日期和時間(「牆」日期和時間)

我的問題是關於如何返回當前的日期和時間,考慮我的應用程序正在運行的時區。以下是我寫回來的當前日期時間的一種方法。問題是,它總是讓我回到UTC時間。

private String getCurrentDate() 
{ 
    DateTime currentDate = new DateTime(DateTimeZone.getDefault()); 
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM hh:mm"); 
    String dateNow = formatter.format(currentDate); 
    return dateNow; 
} 

感謝您的幫助!

回答

1
private String getCurrentDate() 
{ 
     final DateFormat format = DateFormat.getDateTimeInstance(); 
     format.setTimeZone(Calendar.getInstance().getTimeZone()); 
     return format.format(new Date()); 
} 

這應該做的工作。獲取真正本地時區的棘手部分。但是這個類的Java技術很好地訣竅。

作爲DateFormat如果您願意,您還可以使用您的SimpleDateFormat

+0

或'TimeZone.getDefault()'將返回程序運行的時區。例如。 'format.setTimeZone(TimeZone.getDefault())'。 –

+0

不,那是錯的。 TimeZone.getDefault()在某些Java實現中返回本地時區,但是例如Linux下的OpenJDK 6被報告總是返回GMT時區,而不管真實時區。 – Nitram

0

DateFormat(和SimpleDateFormat)默認爲JVM的時區,這應該是您計算機的時區。

DateFormat format = new SimpleDateFormat("dd-MMM hh:mm"); 
System.out.println(format.format(new Date())); 

打印出在本地時區。您可以通過致電setTimeZone明確地設置DateFormat的時區。

format.setTimeZone(TimeZone.getTimeZone("PDT")); 
+0

我的不適,即使這不適合我。實際上,所提供的解決方案都沒有工作。有趣的是,即使是日食,我也從這些代碼中獲得了相同的日期/時間。 (我的桌面顯示下午10:35(當地時間正確),因爲我輸入了這個信息,而我正在下午5:05)。我錯過了一些微不足道的東西嗎? – user1639485

+0

在getTimeZone()中明確指定了timeZone之後,我得到了正確的結果。是不是TimeZone.getDefault()應該返回我的本地時區? – user1639485