2011-06-08 34 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