public static void main(String args[]){
Pattern pattern = Pattern.compile("^([0-9]{4}[-][0-9]{2}[-][0-9]{2}\\s+[0-9]{2}[:][0-9]{2}[:][0-9]{2})[.]*([0-9]*)$");
String mydata = "2019-12-23 12:40:43.775936";//case1
//String mydata = "2019-12-23 12:40:43";//case2
Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date = LocalDateTime.parse(matcher.group(1), dtf);
ZonedDateTime zdt = date.atZone(ZoneId.of("Asia/Kuwait"));
System.out.println(zdt.toInstant().toEpochMilli());
}
目前,我正在使用正则表达式来执行此操作。我想避免使用正则表达式,以便我的代码适用于案例 1 和案例 2。请提出建议。
这里不需要正则表达式,你只需要这个模式
yyyy-MM-dd HH:mm:ss[.SSSSSS]
这是一个简单的例子,你的代码可以是这样的:
String[] dates = {"2019-12-23 12:40:43.775936", "2019-12-23 12:40:43"};
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.SSSSSS]");
for (String date: dates){
LocalDateTime ldt = LocalDateTime.parse(date, dtf);
LocalDate ld = ldt.toLocalDate();
System.out.println(ld);
}
输出
2019-12-23
2019-12-23
编辑
.. the above code does not work for date in this format : 2019-12-23 12:40:43.888
如果您有多种格式,并且不确定日期字符串应该是什么样子,那么还有其他选择:
Ole V.V.在他的回答中提出一个很好的技巧,你的解决方案可以是这样的:
LocalDateTime ldt = LocalDateTime.parse(date.replace(' ', 'T'));
请注意,您不需要 DateTimeFormatter
,因为它使用 LocalDateTime
的默认格式。
完整解决方案:
String[] dates = {"2019-12-23 12:40:43.775936", "2019-12-23 12:40:43", "2019-12-23 12:40:43.888"};
for (String date: dates){
LocalDateTime ldt = LocalDateTime.parse(date.replace(' ', 'T'));
LocalDate ld = ldt.toLocalDate();
System.out.println(ld);
}
另一个技巧,可以在你的情况下工作,所以因为你正在寻找日期部分,你可以像这样提取它:
LocalDate ld = LocalDate.parse(date.substring(0, date.indexOf(' ')));
完整解决方案:
String[] dates = {"2019-12-23 12:40:43.775936", "2019-12-23 12:40:43", "2019-12-23 12:40:43.888"};
for (String date: dates){
LocalDate ld = LocalDate.parse(date.substring(0, date.indexOf(' ')));
System.out.println(ld);
}
输出
2019-12-23
2019-12-23
2019-12-23