从时代开始的几天里获取java.util.Calendar

从时代开始的几天里获取java.util.Calendar,第1张

从时代开始的几天里获取java.util.Calendar

以下应该工作:

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,因此一切正常。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4964215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存