我看了这个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.663
,2018-03-02T10:36:30.596
,2018-03-11T05:06:30.663
?由于日期和时间总是在一起,我应该从时间戳中提取时间吗?在这种情况下处理这个问题的最佳方法是什么?我对Java中的日期时间库不太熟悉。
答案 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.isAfter
和LocalTime.isBefore
,这会产生稍微好看的代码。