我可以像这样将19位unix时间戳转换为LocalDateTime
Instant instant =
Instant.ofEpochSecond(
TimeUnit.NANOSECONDS.toSeconds(timestamp),
(timestamp % 1_000_000_000L));
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
您可以使用instant.Ofepochmilli
从时间戳中以毫秒获得时间,然后使用instant#plusnanos
添加微秒。
它看起来是这样的:
Instant instant = Instant.ofEpochMillis(timestamp/1_000).plusNanos(timestamp%1_000);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
timestamp/1_000
获取以毫秒为单位的时间,截断微秒,plusnanos(时间戳%1_000)
添加微秒部分并返回一个新的instant
。
ZonedDateTime zonedTimestamp=yourLocalDateTime.atZone(ZoneId.systemDefault());
Instant convertedInstant=zonedTimestamp.toInstant();
long recreatedTimeMicros=convertedInstant.toEpochMillis()*1_000+(convertedInstant.getNano()/1_000)%1_000;
这将LocalDateTime
转换为具有默认时区的ZonedDateTime
(您在另一个方向上使用),并获取纪元毫秒,然后将纳秒添加到它。
注意,getnanos()
获取上一秒以来的纳秒数。毫秒需要乘以1000,以微秒为单位,纳秒要除以1000,原因相同。此外,还需要模运算,这样就不会多次计算毫秒数。
Windows函数给出给定线程使用的“CPU时钟周期”数。Windows手册中大胆地指出 不要尝试将QueryThreadCycleTime返回的CPU时钟周期转换为经过的时间。 对于大多数英特尔和AMDx86_64CPU,我想这样做。它不需要非常精确,因为无论如何你都不能期望像RDTSC这样的循环计数器完美。我只需要一些笨拙的方法来获取CPU的时间因子。 首先,我设想在内部使用RDTSC。我设想
我有一个对象,想将其转换为对象。 相比之下,我可以使用进行类似的转换: 这个答案对我无效,因为我的< code>java.sql.Date没有getTimestamp方法。 作为参考,这个问题解决了相反的转变。
我从GPS接收机接收到一个时间戳,它以秒后的微秒时间表示:
但这一个返回的是基于本地时间的毫秒。也不考虑ZoneID。 假设。如果我将其转换为具有区域id(“Asia/Kolkata”)的,那么我将得到()。然后以UTC转换为EpochMilli(1554854400000)=()。