以下应该工作:
Calendar c = new GregorianCalendar();c.setTime(new Date(0));c.add(Calendar.DAY_OF_YEAR, 1000);System.err.println(c.getTime());
关于时区的注释:
GregorianCalendar使用程序运行所在系统的默认时区创建一个新实例。由于Epoch是相对于UTC(Java中的GMT)的,因此必须谨慎处理与UTC不同的任何时区。以下程序说明了该问题:
TimeZone.setDefault(TimeZone.getTimeZone("GMT-1"));Calendar c = new GregorianCalendar();c.setTimeInMillis(0);System.err.println(c.getTime());System.err.println(c.get(Calendar.DAY_OF_YEAR));c.add(Calendar.DAY_OF_YEAR, 1);System.err.println(c.getTime());System.err.println(c.get(Calendar.DAY_OF_YEAR));
此打印
Wed Dec 31 23:00:00 GMT-01:00 1969365Thu Jan 01 23:00:00 GMT-01:00 19701
这表明仅使用eg是不够的
c.get(Calendar.DAY_OF_YEAR)。在这种情况下,必须始终考虑到一天中的什么时间。这可以通过显式使用GMT创建时要避免
GregorianCalendar:
newGregorianCalendar(TimeZone.getTimeZone("GMT"))。如果日历是这样创建的,则输出为:
Wed Dec 31 23:00:00 GMT-01:00 19691Thu Jan 01 23:00:00 GMT-01:00 19702
现在,日历返回有用的值。为什么原因
Date被退回
c.getTime()仍然是“关”是该
toString()方法使用默认
TimeZone建立的字符串。在顶部,我们将此设置为GMT-1,因此一切正常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)