小智 5
在 Java 8 及更高版本中使用java.time类。在一行中:
LocalDate date = LocalDate.ofEpochDay(1000);
Run Code Online (Sandbox Code Playgroud)
调用从纪元日计数中ofEpochDay(long epochDay)获取一个实例LocalDate。
以下应该有效:
Calendar c = new GregorianCalendar();
c.setTime(new Date(0));
c.add(Calendar.DAY_OF_YEAR, 1000);
System.err.println(c.getTime());
Run Code Online (Sandbox Code Playgroud)
关于时区的注释:
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));
Run Code Online (Sandbox Code Playgroud)
这打印
Wed Dec 31 23:00:00 GMT-01:00 1969
365
Thu Jan 01 23:00:00 GMT-01:00 1970
1
Run Code Online (Sandbox Code Playgroud)
这表明仅使用 eg 是不够的c.get(Calendar.DAY_OF_YEAR)。在这种情况下,人们必须始终考虑现在是一天中的什么时间。GregorianCalendar通过在创建:时显式使用 GMT 可以避免这种情况new 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
Run Code Online (Sandbox Code Playgroud)
现在日历返回有用的值。Date返回的仍然是“off”的原因c.getTime()是该toString()方法使用默认值TimeZone来构建字符串。在顶部,我们将其设置为 GMT-1,因此一切正常。
| 归档时间: |
|
| 查看次数: |
7303 次 |
| 最近记录: |