您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

从时代开始的几天里获取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 1969
365
Thu Jan 01 23:00:00 GMT-01:00 1970
1

这表明仅使用eg是不够的c.get(Calendar.DAY_OF_YEAR)在这种情况下,必须始终考虑到一天中的什么时间。这可以通过显式使用GMT创建时要避免GregorianCalendarnew GregorianCalendar(TimeZone.getTimeZone("GMT"))。如果日历是这样创建的,则输出为:

Wed Dec 31 23:00:00 GMT-01:00 1969
1
Thu Jan 01 23:00:00 GMT-01:00 1970
2

现在,日历返回有用的值。为什么原因Date被退回c.getTime()仍然是“关”是该toString()方法使用TimeZone建立的字符串。在顶部,我们将此设置为GMT-1,因此一切正常。

java 2022/1/1 18:26:24 有560人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶