startDate = "DD/MM/YYYY", end-6ren">
gpt4 book ai didi

java - 在java 8中从LocalDateTime减去/添加 "zone diff time"的最有效方法是什么

转载 作者:行者123 更新时间:2023-12-02 02:18:37 25 4
gpt4 key购买 nike

我的客户坐在其他区域。在 UI 上,可以通过 DateRange(开始和结束日期)进行搜索。客户端以字符串形式发送开始和结束日期。例如 -> startDate = "DD/MM/YYYY", endDate = "DD/MM/YYYY" 。服务器将日期转换为searchStartDate = "DD/MM/YYYY 00:00:01"searchEndDate = "DD/MM/YYYY 23:59:59" 。但在数据库中搜索之前,我需要在这些searchStartDate中添加“区域时差”和searchEndDate 。不同的客户坐在不同的区域。我们如何使用 java 8 API 添加/减去区域差异时间?

例如 - 我的服务器以 UTC 运行。和客户坐在 IST。我将从 searchStartDate 中减去 5H:30M和searchEndDate在搜索数据库之前。

我有什么 - LocalDateTime searchStartDate and searchEndDate 。我想要什么searchStartDate = searchStartDate.plus(<UtcIstTimeZoneDiff>) .

编辑 - 服务器知道每个客户端的时区。

最佳答案

    DateTimeFormatter searchDateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
ZoneId clientZone = ZoneId.of("Asia/Colombo");
String startDate = "29/01/2018";
String endDate = "04/02/2018";

Instant searchStartTime = LocalDate.parse(startDate, searchDateFormatter)
.atStartOfDay(clientZone)
.toInstant();
Instant searchEndTime = LocalDate.parse(endDate, searchDateFormatter)
.plusDays(1)
.atStartOfDay(clientZone)
.toInstant();

System.out.println("" + searchStartTime + " inclusive to "
+ searchEndTime + " exclusive");

此示例打印

2018-01-28T18:30:00Z inclusive to 2018-02-04T18:30:00Z exclusive

使用半开间隔:不要试图决定一天中的最后一个时钟小时并考虑是否想要秒上有多少位小数,最好将搜索结束时间设置为第二天的第一时刻,然后仅检索严格该时间之前的记录。

我为您提供即时的开始时间和结束时间。大多数 JDBC 驱动程序都乐于使用它们,我认为这是一个优点,因为它们本质上代表时间轴上的点,这正是您需要它们的目的。如果您的搜索确实需要 LocalDateTime,可以通过以下方式获取:

    LocalDateTime searchStartTime = LocalDate.parse(startDate, searchDateFormatter)
.atStartOfDay(clientZone)
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime();

搜索结束时间情况类似。

关于java - 在java 8中从LocalDateTime减去/添加 "zone diff time"的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48887068/

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