2011-06-08 36 views
2

我有一個Grails應用程序我創建了一個格里曆日曆格林威治時間日期。一天中的時間是11:00:00 PM GMT。我爲公曆日曆對象添加了3個小時,它將當天的時間更改爲2:00:00 AM,但它並沒有增加一年中的某一天。當我給日曆添加幾小時時,我必須檢查這個情況,如果新的時間過去了,我必須增加一年中的某一天。這看起來像GregorianCalendar類中的一個錯誤,但要確保我沒有做錯什麼。以下是我添加小時的不同方式。問題與格式化日曆添加小時

myCalender.add(Calender.HOUR,3) 

myCalender.add(Calender.HOUR_OF_DAY,3)` 

myCalender.setTimeInMillis(myCalender.getTimeInMillis() + (((1000 * 60) * 60) * 3))` 

如果開始日期和時間例如6/1/2011 11:00:00 PM GMT和我執行上面的代碼,我希望新的日期和時間是6/2/2011 02:00:00 AM GMT但我得到的是6/1/2011 02:00:00 AM GMT。有人可以教育我嗎?

回答

4

工作對我來說:

final DateFormat format = SimpleDateFormat.getDateTimeInstance(); 
format.setTimeZone(DateUtils.UTC_TIME_ZONE); 

final GregorianCalendar cal = new GregorianCalendar(DateUtils.UTC_TIME_ZONE); 
cal.set(2011, Calendar.JUNE, 1, 23, 30, 0); 
System.out.println(format.format(cal.getTime())); 
cal.add(Calendar.HOUR_OF_DAY, 1); 
System.out.println(format.format(cal.getTime())); 

產地:

2011-06-01 23:30:00 
2011-06-02 00:30:00 
+0

感謝您的答覆我的問題。看看你的代碼,我認爲我的問題是在我的本地時區。您使用UTC創建了GregorianCalendar,並在顯示日期時使用了也設置爲UTC的DateFormat。當我查看日期時間時,我沒有將DateFormat設置爲UTC,因此它在我的本地時區中顯示日期時間。我的本地時間少於UTC,因此比前一天少。現在對我更有意義了,謝謝! – 2011-06-09 16:27:47

+0

我懷疑時區,這就是我明確使用UTC的原因。很高興我能幫忙,考慮接受答案,如果它解決了你的問題。 – 2011-06-09 19:43:23