Sla*_*law 14
精度不同,因为LocalDateTime.now()使用系统默认值Clock.
从默认时区中的系统时钟获取当前日期时间.
这将在默认时区中查询系统时钟以获取当前日期时间.
...
这个Javadoc中的链接将您带到Clock.systemDefaultZone()哪些状态(强调我的):
获取使用最佳可用系统时钟返回当前时刻的时钟,使用默认时区转换为日期和时间.
该时钟基于最佳可用系统时钟.这可能使用System.currentTimeMillis(),或者更高分辨率的时钟(如果有).
...
Java使用的时钟取决于很多东西,看起来你的Mac电脑有一个微秒精度的时钟,而你的Windows电脑有一个毫秒精度的时钟.我不知道有什么方法可以提高时钟的精度,但你绝对可以降低精度,以便它可以跨平台进行匹配.
一个选择是Ole VV在他的回答和使用中做的LocalDateTime.truncatedTo(TemporalUnit).
另一个选择是插入自己的Clock并使用LocalDateTime.now(Clock).如果可能,我会使用,Clock.tickMillis(ZoneId)因为此方法返回Clock截断为毫秒.
获得一个时钟,使用最佳可用系统时钟以整数毫秒返回当前瞬时滴答.
此时钟将始终具有截断到毫秒的纳秒级字段.这确保了可见时间以整数毫秒为单位.基础时钟是最佳可用系统时钟,相当于使用系统(ZoneId).
...
从:
9
Mat*_*W90 10
如果有人在 Java 15 上或在 Java 15 上遇到同样的Instant精度问题,我想展示其中的差异:macubuntu
mac 即时精度:2021-03-10T12:28:19.228816Z
ubuntu 即时精度:2021-03-10T12:28:19.228816800Z
解决方案:如果您想在该操作系统上具有相同的精度,请添加.truncatedTo(ChronoUnit.MILLIS)到变量Instant
我认为你不能获得比你已经获得的更精确的精确度.如果你想降低精度以匹配其他系统的精度,它很简单(当你知道如何):
LocalDateTime.now(ZoneId.of("Europe/Berlin")).truncatedTo(ChronoUnit.MILLIS);
Run Code Online (Sandbox Code Playgroud)
您获得的精度取决于硬件,设置,操作系统以及JVM与所有这些的集成.众所周知,Mac通常提供比Windows更高的精度(尽管我的印象是只有Java 9的情况,根据OpenJDK问题#JDK-8068730).
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |