gpt4 book ai didi

java - 如何在 JSON 序列化期间将服务器时区添加到 localdatetime?

转载 作者:行者123 更新时间:2023-11-30 02:22:52 38 4
gpt4 key购买 nike

我对 RESTful Web 服务中的所有时间戳使用 LocalDateTime,并且所有时间戳初始化和更改都在服务器上进行。
当服务的客户端创建某些资源时,服务器会在内部为该资源分配创建时间戳。

class Resource {
private String data;
private LocalDateTime creationTimestamp;

public Resource(String someData) {
this.data = someData;
this.creationTimestamp = LocalDateTime.now();
}
}

服务器以 JSON 格式返回资源:

{
"data" : "someData",
"creationTimestamp" : "2017-09-22T12:03:44.022"
}

当客户端渲染 creationTimestamp 时,它不知道创建此时间戳的服务器时区,并且会错误地渲染时间。

我看到解决这个问题的唯一方法:将应用程序中的所有时间戳更改为 ZonedDateTime 并将它们与 JSON 中的时区一起返回给客户端。但这种方法的成本非常高。

还有其他方法可以解决这个问题吗?

最佳答案

为什么不在服务器上将所有时间戳存储为 java.time.Instant 类型的对象并将即时发送到客户端?

这意味着:

class Resource {
private String data;
private Instant creationTimestamp;

public Resource(String someData) {
this.data = someData;
this.creationTimestamp = Instant.now();
}
}

然后,客户端的任务是打印客户端所在时区的即时信息。

这种方法避免了发送大量数据,并且在服务器上也是一种精简的解决方案。它正在对在服务器上存储 UTC 时间戳的概念进行建模,所有客户端都可以理解。对于即时/时刻的客户端格式化,例如这样:

DateTimeFormatter dtf = ...; // custom format (maybe localized)
Instant serverInstant = ...;
String formatted =
dtf.format(serverInstant.atZone(ZoneId.of("Europe/Berlin")));
// or ZoneId.systemDefault()

关于java - 如何在 JSON 序列化期间将服务器时区添加到 localdatetime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361019/

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