获取自纪元以来的天数的 java.util.Calendar
我有一个变量,其中包含自 1970 年 纪元参考日期以来的天数-01-01
特定日期。
有人知道如何将此变量转换为 java.util.Calendar 吗?
I have a variable containing the days since the epoch reference date of 1970-01-01
for a certain date.
Does someone know the way to convert this variable to a java.util.Calendar
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 java.time 类在 Java 8 及更高版本中。一行:
调用
ofEpochDay(long epochDay)
获取LocalDate
来自纪元天数。Use the java.time classes in Java 8 and later. In one line:
Calling
ofEpochDay(long epochDay)
obtains an instance ofLocalDate
from the epoch day count.以下内容应该有效:
关于时区的注释:
使用程序运行所在系统的默认时区创建一个新的 GregorianCalendar 实例。由于 Epoch 是相对于 UTC(Java 中的 GMT)而言的,任何与 UTC 不同的时区都必须小心处理。以下程序说明了该问题:
打印结果
表明仅使用
c.get(Calendar.DAY_OF_YEAR)
是不够的。在这种情况下,人们必须始终考虑现在是一天中的什么时间。通过在创建GregorianCalendar
时显式使用 GMT 可以避免这种情况:new GregorianCalendar(TimeZone.getTimeZone("GMT"))
。如果日历是这样创建的,则输出为:现在日历返回有用的值。
c.getTime()
返回的Date
仍然是“off”的原因是toString()
方法使用了默认的>TimeZone
来构建字符串。在顶部,我们将其设置为 GMT-1,因此一切正常。The following should work:
A note regarding time zones:
A new
GregorianCalendar
instance is created using the default time zone of the system the program is running on. Since Epoch is relative to UTC (GMT in Java) any time zone different from UTC must be handled with care. The following program illustrates the problem:This prints
This demonstrates that it is not enough to use e.g.
c.get(Calendar.DAY_OF_YEAR)
. In this case one must always take into account what time of day it is. This can be avoided by using GMT explicitly when creating theGregorianCalendar
:new GregorianCalendar(TimeZone.getTimeZone("GMT"))
. If the calendar is created such, the output is:Now the calendar returns useful values. The reason why the
Date
returned byc.getTime()
is still "off" is that thetoString()
method uses the defaultTimeZone
to build the string. At the top we set this to GMT-1 so everything is normal.