gpt4 book ai didi

java - 如何将 LocalDateTime 转换为忽略日期时区?

转载 作者:行者123 更新时间:2023-12-02 01:03:40 27 4
gpt4 key购买 nike

我想从 LocalDateTime 中减去小时并转换为日期,但我的方法总是绕过时区因素。

Date fromDate = request.getFromDate();
LocalDateTime reqFromDate = LocalDateTime.ofInstant(fromDate.toInstant(), ZoneOffset.UTC).truncatedTo(ChronoUnit.DAYS);
Date fromDateArg = Date.from(reqFromDate.minusHours(11).toInstant(ZoneOffset.UTC));

例如:

2020-01-01T20:00 >> I want exactly: 2020-01-01T9:00 date that independent with timezone.

包含的时区可能会影响作为绑定(bind)参数传递给查询的结果。我该如何摆脱它?

最佳答案

你问的是不可能的事。 LocalDateTime 本身并不定义时间点。另一方面,Date 是一个点 int 时间(不管类名如何)。那么如何才能实现转换呢?您想要哪种转换?

为了增加一点深度,LocalDateTime 是没有时区的日期和时间。 java.time 中某些类名中的 Local 表示“没有偏移量或时区”。要将 LocalDateTime 解释为时间点,您首先需要在某个时区进行解释,留出大约 26 小时的时间跨度。

Date 无法独立于时区表示 2020-01-01T09:00。绝不。它可以表示一个时间点,在某些时区将呈现为 2020-01-01T09:00

您是对的,时区会对您获得的结果产生影响。这正是我们需要它进行转换的原因。

您在评论中说您需要它作为 JPA 绑定(bind)参数。我想知道这是否有必要。要将独立于时区的日期和时间传递给 JPA 查询,请传递 LocalDateTime。现代 JPA 实现应该接受这一点。

如果无法将现代类传递给 JPA,则使用 JVM 的默认时区 (ZoneId.systemDefault()) 进行转换可能会给您带来所需的结果。在这个时区解释日期是很常见的。

关于java - 如何将 LocalDateTime 转换为忽略日期时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60316761/

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