从纪元后的几天开始获取java.util.Calendar

|| 我有一个变量,其中包含自某个时期的“ 0”年代参考日期以来的天数。 有人知道将该变量转换为
java.util.Calendar
的方法吗?     
已邀请:
以下应该工作:
Calendar c = new GregorianCalendar();
c.setTime(new Date(0));

c.add(Calendar.DAY_OF_YEAR, 1000);

System.err.println(c.getTime());
关于时区的说明: 使用程序运行所在系统的默认时区创建一个新的“ 3”实例。由于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
这表明仅仅使用例如
c.get(Calendar.DAY_OF_YEAR)
。在这种情况下,必须始终考虑到一天中的什么时间。创建creating3ѭ:
new GregorianCalendar(TimeZone.getTimeZone(\"GMT\"))
时,可以通过显式使用GMT来避免这种情况。如果日历是这样创建的,则输出为:
Wed Dec 31 23:00:00 GMT-01:00 1969
1
Thu Jan 01 23:00:00 GMT-01:00 1970
2
现在,日历返回有用的值。
c.getTime()
返回的
Date
仍然为“ off \”的原因是
toString()
方法使用默认的
TimeZone
来构建字符串。在顶部,我们将此设置为GMT-1,因此一切正常。     
在Java 8和更高版本中使用java.time类。一行:
LocalDate date = LocalDate.ofEpochDay(1000);
调用
ofEpochDay(long epochDay)
从纪元日计数中获得
LocalDate
的实例。     
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(0);
cal.add(Calendar.DAY_OF_MONTH, daysSinceEpoch);
    

要回复问题请先登录注册