我想以“秒”:“纳秒”格式获取 kotlin 中的 EPOCH 时间戳。
注意:请查看已接受的答案以获得正确的解决方案。
编辑:
这是我目前的解决方案,我确信会有更好的方法来实现这一目标,
import java.time.Instant
import java.time.temporal.ChronoUnit;
import kotlin.time.Duration.Companion.seconds
fun main() {
val epochNanoseconds = ChronoUnit.NANOS.between(Instant.EPOCH, Instant.now())
val epochSeconds = epochNanoseconds/1.seconds.inWholeNanoseconds
val remainingFractionOfNanoSeconds = epochNanoseconds%1.seconds.inWholeNanoseconds
println("$epochSeconds:$remainingFractionOfNanoSeconds")
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
1670251213:849754000
Run Code Online (Sandbox Code Playgroud)
另一个例子(来自评论): 对于 1670251213 秒 50000 纳秒,也称为十进制 1670251213.00005 秒,我想要1670251213:50000(意味着:)。
有没有什么方法可以直接从java.time.Instant或任何其他可用的库中获取秒数和剩余纳秒数来方便地实现此目的?
已接受答案的解决方案:
import java.time.Instant
fun main() {
val time = Instant.now()
println("${time.epochSecond}:${time.nano}")
}
Run Code Online (Sandbox Code Playgroud)
你工作太辛苦了。
询问Instant对象自 1970-01-01T00:00Z 以来的整秒数。制作一个字符串,附加冒号字符。然后将纳秒计数附加到 的小数秒中Instant。
instant.getEpochSecond()
+ ":"
+ instant.getNano()
Run Code Online (Sandbox Code Playgroud)
1670220134:130848
旧版日期时间类(Calendar、Date等)和现代java.time类都不支持您请求的国际原子时间 (TAI) 。传统计算机(以及 Java)上的计时远不如原子钟那么准确。
也许您宽松地使用了该术语,并且实际上只想要自 1970 年第一个时刻的纪元参考以来的纳秒计数,如在限制内与UTC零小时-分钟-秒 (1970-01-01T00:00Z) 的偏移量所示传统计算机硬件。
如果是这样,该Instant课程将适合您。但要注意基于OpenJDK代码库的 Java 实现的限制。
请注意,在所有版本(8、9 及更高版本)中,anInstant都具有纳秒分辨率。上面列出的限制与从计算机硬件时钟捕获当前时刻有关。
类中时刻的内部表示Instant包括两部分:
该类Instant提供了一对访问器方法(getter)来查看这两个数字。
您的问题并不完全清楚,您似乎是在要求这两个数字之间有一个冒号字符。
instant.getEpochSecond()
+ ":"
+ instant.getNano()
Run Code Online (Sandbox Code Playgroud)
instant.toString(): 2022-12-05T06:12:33.294698Z
输出:1670220753:294698
如果您想在小数秒右侧填充零,请使用String.format。
Instant instant = Instant.now() ;
String nanos = Long.toString( instant.getNano() ) ;
String output =
instant.getEpochSecond()
+ ":"
+ instant.getNano()
;
Run Code Online (Sandbox Code Playgroud)
instant.toString(): 2022-12-05T06:12:33.294698Z
输出:1670220753:294698000
或者,您可以实例化一个BigDecimal对象。
| 归档时间: |
|
| 查看次数: |
5470 次 |
| 最近记录: |