如果您从Java-8使用java.time
,则可以使用:
long timeStampSeconds = ChronoUnit.MICROS.between(Instant.EPOCH,Instant.now());
您可以将其转换为一个瞬间,然后将该瞬间转换为ZoneDateTime
Instant inst = Instant.EPOCH.plus(timeStampSeconds,TimeUnit.MICROSECONDS.toChronoUnit());
ZonedDateTime zdt = inst.atZone(ZoneId.of("Europe/Paris"));
然后您可以获取月,年,日,小时,...
Month month = zdt.getMonth();
int year = zdt.getYear();
输出
MICROS: 1574073141066090
ZoneDateTime: 2019-11-18T11:32:21.066090+01:00[Europe/Paris]
,
这取决于平台和Java版本。
在我的Mac示例中,代码中的timeStampSeconds
值包括
- 使用jdk-1.8.0_121:1574193249064000和1574193338130000;所以总是以000结尾
使用li dk-9.0.4:1574193430428678和1574193438362321;因此通常不会以000结尾。
在Java 8上,java.time类的now
方法没有比millisenods更好的粒度,因此毫秒级的毫秒数始终为000。在Java 9上,如果平台更精细支持它,并非所有平台都支持。
因此,如果您始终获得000,则解决方案是至少升级到Java 9并在支持微秒精度的计算机上运行Java程序。
不要使用日历
Calendar
类的设计很差,而且已经过时了。而且,它永远不支持任何毫秒以上的单位。要将微秒值转换回日期和时间对象,请使用例如:
long timeStampSeconds = 1_574_193_438_362_321L;
Instant convertedBack = Instant.EPOCH.plus(timeStampSeconds,ChronoUnit.MICROS);
System.out.println(convertedBack);
2019-11-19T19:57:18.362321Z
您会注意到保留了完整的微秒精度。 YCF_L在另一个答案中已经显示了如何获取年和月的值。
本文链接:https://www.f2er.com/3082049.html