gpt4 book ai didi

java - 如何将 LocalDateTime 转换为 com.google.protobuf.Timestamp?

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:14 25 4
gpt4 key购买 nike

我有一个 LocalDateTime 实例,它是从存储库层获取的,我需要将其转换为时间戳( Protocol Buffer )实例。

我已经习惯了以下转换方法:

LocalDateTime localDateTime = LocalDateTime.now();//this can be any date

Instant instant = localDateTime.toInstant(ZoneOffset.UTC);

Timestamp timestamp = Timestamp.newBuilder()
.setSeconds(instant.getEpochSecond())
.setNanos(instant.getNano())
.build();

这里使用 ZoneOffset 将 localDateTime 转换为 Instant 的实例,对吗?

我使用了 UTC 偏移量,因为 Timestamp 类中“seconds”属性的注释如下所示:

Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive

我是否使用了正确的 ZoneOffset 以及我的转换方法是否正确?

最佳答案

总的来说,不,你的做法是不正确的。原因是 LocalDateTime 没有关联的时区,因此它本质上是不明确的。要将其转换为实际时间戳(绝对时间点,独立于时区),您需要知道它是在哪个时区测量的。

通过调用 localDateTime.toInstant(ZoneOffset.UTC),您假设您的 localDateTime 实际上是在 UTC 时区中测量的。 相反,您应该使用存储 LocalDateTime 的时区。如果您不知道,那么您的输入数据本质上是不明确的,您需要修复

请注意,这与 Unix 纪元通常以 UTC 指定的事实无关。我们也可以说 Unix 纪元是 1970-01-01T08:00:00+08:00,这将是同一时刻。

其余部分对我来说似乎是正确的。

关于java - 如何将 LocalDateTime 转换为 com.google.protobuf.Timestamp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50733646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com