У меня есть две строки времени, которые могут быть в любом формате (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.
}