【发布时间】:2020-09-11 23:05:40
【问题描述】:
我有两个时间字符串,可以是任何格式(12 小时或 24 小时,有或没有时区)。 如何比较它们在java中的格式是否不同以及是否存在数据不匹配?
PS> 我已经准备了一个正则表达式列表,并将字符串与这些表达式匹配以获取格式,然后使用字符串的 equals() 方法检查数据差异。 这种方法的问题是 (20:01:02,20 01 01) 返回格式差异,而预期结果应该是数据差异。 请帮忙,我卡在这里很久了。
正则表达式映射-
private static final Map<String, String> TIME_FORMAT_REGEXPS = new HashMap<String, String>() {{
put("^(1[0-2]|0?[1-9]):([0-5]?[0-9])(●?[AP]M)?$", "1");
put("^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$", "2");
put("^(1[0-2]|0?[1-9]):([0-5]?[0-9]):([0-5]?[0-9])(●?[AP]M)?$", "3");
put("^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$", "4");
put("^(2[0-3]|[01][0-9]):?([0-5][0-9])$", "5");
put("^(?<hour>2[0-3]|[01][0-9]):?(?<minute>[0-5][0-9])$", "6");
put("^(2[0-3]|[01][0-9]):?([0-5][0-9]):?([0-5][0-9])$", "7");
put("^(?<hour>2[0-3]|[01][0-9]):?(?<minute>[0-5][0-9]):?(?<second>[0-5][0-9])$", "8");
put("^(Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)$", "9");
put("^(2[0-3]|[01][0-9]):?([0-5][0-9]):?([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)$", "10");
put("^(?<hour>2[0-3]|[01][0-9]):?(?<minute>[0-5][0-9]):?(?<second>[0-5][0-9])(?<timezone>Z|[+-]"
+ "(?:2[0-3]|[01][0-9])(?::?(?:[0-5][0-9]))?)$",
"11");
}};
检查字符串格式的函数-
private String determineTimeFormat(String dateString) {
for (String regexp : TIME_FORMAT_REGEXPS.keySet()) {
if (dateString.toLowerCase().matches(regexp)) {
return TIME_FORMAT_REGEXPS.get(regexp);
}
}
return "100"; // Unknown format.
}
【问题讨论】:
-
请分享您的尝试,编辑您的帖子并添加您的 cpde
-
请添加你做了什么?您问题的一些代码
-
看来这个问题需要更加专注
-
一旦你确定了一个字符串的格式,使用适合该格式的
DateTimeFormatter将它解析成一个LocalTime对象。然后比较两个得到的LocalTime对象是否相等。使用您的搜索引擎获取详细信息。 (您也可以使用格式化程序来确定格式并跳过正则表达式。) -
如果一个有 UTC 偏移而另一个没有,在什么情况下你会认为两个时间是相同的?如果他们有不同的偏移量?
标签: java time comparison string-comparison datetime-comparison