gpt4 book ai didi

java - 打印两个时间戳之间的所有时间戳

转载 作者:行者123 更新时间:2023-12-01 17:46:49 25 4
gpt4 key购买 nike

就像标题所说,给定两个日期,时间如下

time1= "2017-01-31 12:00:00" 
time2= "2017-01-31 15:00:00”

我想返回数组中这两个时间和日期之间的所有时间戳。例如,数组如下所示:

2017-01-31 01:33:30 random text log message x

2017-01-31 08:34:30 sdfsd log message y

2017-01-31 11:35:30 sdfsdfsdf log message z

2017-01-31 12:30:30 random text log message x

2017-01-31 13:31:30 sdfsd log message y

2017-01-31 14:32:30 sdfsdfsdf log message z

2017-01-31 16:32:35 sdfsdfsdf log message a

2017-01-31 16:33:30 random text log message x

2017-01-31 16:34:30 sdfsd log message y

2017-01-31 16:35:30 sdfsdfsdf log message z

2017-01-31 16:36:35 sdfsdfsdf log message a

输出:

2017-01-31 12:30:30 random text log message x

2017-01-31 13:31:30 sdfsd log message y

2017-01-31 14:32:30 sdfsdfsdf log message z

我是否必须使用正则表达式来存储每个单独的时间/日期戳的时间和日期,然后将它们与数组中的每个时间戳进行比较?或者什么是最佳解决方案?

最佳答案

java.time

    DateTimeFormatter logDtf = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

String[] logMessages = {
"2017-01-31 01:33:30 random text log message x",
"2017-01-31 08:34:30 sdfsd log message y",
"2017-01-31 11:35:30 sdfsdfsdf log message z",
"2017-01-31 12:30:30 random text log message x",
"2017-01-31 13:31:30 sdfsd log message y",
"2017-01-31 14:32:30 sdfsdfsdf log message z",
"2017-01-31 16:32:35 sdfsdfsdf log message a",
"2017-01-31 16:33:30 random text log message x",
"2017-01-31 16:34:30 sdfsd log message y",
"2017-01-31 16:35:30 sdfsdfsdf log message z",
"2017-01-31 16:36:35 sdfsdfsdf log message a"
};

String time1 = "2017-01-31 12:00:00";
String time2 = "2017-01-31 15:00:00";

LocalDateTime start = LocalDateTime.parse(time1, logDtf);
LocalDateTime end = LocalDateTime.parse(time2, logDtf);

Arrays.stream(logMessages)
.filter(lm -> {
TemporalAccessor parsedDateTime = logDtf.parse(lm, new ParsePosition(0));
LocalDateTime logDateTime = LocalDateTime.from(parsedDateTime);
return ! logDateTime.isBefore(start)
&& logDateTime.isBefore(end);
})
.forEach(System.out::println);

此代码的输出正是您所要求的:

2017-01-31 12:30:30 random text log message x
2017-01-31 13:31:30 sdfsd log message y
2017-01-31 14:32:30 sdfsdfsdf log message z

我正在使用 java.time,现代 Java 日期和时间 API。我总是推荐它用于 Java 中的任何日期时间工作。我发现合作非常愉快。

我正在过滤您的时间之间的半开间隔。这意味着,将包含标记为 2017-01-31 12:00:00 的日志消息,而标记为 2017-01-31 15:00:00 的日志消息则不会。这是通常且推荐使用的时间间隔。一个优点是,如果您过滤到相邻(不重叠)的时间间隔,则保证每条日志消息只包含一次。

如果您的数组非常大并且始终排序并且性能很重要,那么您可以从使用二分搜索来查找所需间隔的开始和结束位置中受益。如果相关且您还不知道它是什么,请查找它。

链接: Oracle tutorial: Date Time解释如何使用java.time

关于java - 打印两个时间戳之间的所有时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259332/

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