【问题标题】:Problems with ZonedDateTime object receiving on back-endZonedDateTime 对象在后端接收的问题
【发布时间】:2020-03-20 19:49:35
【问题描述】:

我遇到了从前端接收日期的问题。 我以"2020-01-03T00:00:00+02:00" 格式将日期从前端发送到后端的ZonedDateTime 对象。但我收到的不是2020-01-03T00:00Z[UTC],而是2020-01-02T22:00Z[UTC](实际上是-2 小时)。

问题:

有什么方法可以让 ZonedDateTime 库不转换为 UTC,或者不转换为负时区? 也许有任何注释?

控制器和对象简单代码示例

来自前端的对象:

@DIfferentsLombokAnnotations
public class Filters {
  private ZonedDateTime startDate;

  //Other fields
}

控制器:

@PostMapping("/ggg")
public List<ResponceObject> method(@RequestBody Filters filters) {
  //any code
 }

【问题讨论】:

  • 您必须在 ISO 中格式化日期。看看这里:stackoverflow.com/questions/948532/…
  • 谢谢,但后端确实有问题
  • 您得到了正确的时间点(只是表达方式不同,转换为 UTC)。没有减去两个小时。也许您想改为传递LocalDate。这是一个没有时区或偏移量且没有时间的日期,例如2020-01-03,所以时间不可能是错误的。
  • 有没有办法使用 Moment .js lib 传递 LocalDate?
  • 我如何将它转换为 ZDT 到这个值:2020-01-03T00:00Z[UTC]?我只需要 ZDT 对象的主要问题

标签: javascript java spring timezone-offset zoneddatetime


【解决方案1】:

ZonedDateTime 仅支持 UTC 或 UTC+2,这可以解释为什么你会得到你所拥有的结果。一种选择是不发送 ZonedDateTime,而是发送 LocalDate、LocalTime、ZoneId 和 ZoneOffset,然后在后端解析为 ZonedDateTime。归根结底,ZonedDateTime 已经由这些组件组成。

【讨论】:

  • 了解,但是很遗憾,由于特定的架构,我无法更改前端请求。不过谢谢你的回答。
  • 该死,好吧,如果你总是确定偏移量,你可以将 ZonedDateTime 偏移一些偏移量。这可能是一个有效的解决方案(有点)。
  • 当然,我已经通过这种方式实现了……我取了时区,将其转换为秒,并使用 plusSeconds 方法来补偿损失的时间。我只是认为有更好的方法可以做到这一点,使用弹簧或其他配件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多