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

时间:2018-04-18 11:20:09

标签: java datetime

我看了这个question,我的问题很相似,但并不完全相同。我有很多问题的时间戳,它们都是#y; 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,那么它也应该返回真实。)

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

1 个答案:

答案 0 :(得分:3)

您与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,这会产生稍微好看的代码。