gpt4 book ai didi

java - 如何检查时间是否在一个范围内?

转载 作者:行者123 更新时间:2023-12-01 19:55:06 25 4
gpt4 key购买 nike

我看了这个question我的问题类似但不完全相同。我有很多时间戳有问题,它们的格式都是“yyyyMMddHHmmssSSS”,所以我按如下方式解析字符串:

DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").parse("20180301050630663")

它将输出2018-03-01T05:06:30.663(我不知道中间的“T”代表什么,也不知道如何摆脱它)

问题是我只关心 [09:15:00.000am -12:00:00.000pm][15:15:00.000pm 范围内的时间戳-18:00:00.000pm] 跨越所有不同的日期(也包括在内,这意味着如果时间戳恰好位于 09:15:00.000,那么它也应该返回 true)。

但是,我应该如何解决这个问题因为有时日期可能不同,即它可能跨越不同的日期2018-03-01T05:06:30.6632018-03-02T10:36:30.5962018-03-11T05:06:30.663?由于日期和时间总是在一起,我应该从时间戳中提取时间吗?在这种情况下处理这个问题的最佳方法是什么?我对Java中的日期时间库不太熟悉。

最佳答案

您的方向是正确的 DateTimeFormatter 。而不是使用DateTimeFormatter.parse ,您可以将此格式化程序传递给 LocalTime.parse这将有效地丢弃时间戳的日期部分。然后您可以使用 Comparable.compareTo查看它是否在您给出的范围内。

final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");

LocalTime time = LocalTime.parse("20180301050630663", formatter);

if (time.compareTo(LocalTime.of(9, 15)) >= 0
&& time.compareTo(LocalTime.of(12, 0)) <= 0)
{
System.out.println("First period");
}
else if (time.compareTo(LocalTime.of(15, 15)) >= 0
&& time.compareTo(LocalTime.of(18, 0 )) <= 0)
{
System.out.println("Second period");
}

如果您的范围是排他性的而不是包容性的,您可以使用 LocalTime.isAfterLocalTime.isBefore这会导致代码看起来稍微好看一些。

关于java - 如何检查时间是否在一个范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49898434/

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