java - 如何转换字符串中的两个不同日期(2019-12-23 12 :40:43. 777 和 2019-12-23 12 :40:43) to 2019-12-23 format in java 8 in one single method?

标签 java datetime date-formatting java-time

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

关于java - 如何转换字符串中的两个不同日期(2019-12-23 12 :40:43. 777 和 2019-12-23 12 :40:43) to 2019-12-23 format in java 8 in one single method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59492309/

相关文章:

java - 如何知道eclipse中正在使用的jar文件

java - 在 Java 中创建类数组

javascript - 在javascript中使用DST的日期范围

java - 如何在 java/android 中格式化日期

swift - 在 Swift 中将日期格式化为 sql 日期格式

mysql - 如何将 sql 格式更改为天数而不是数字?

java - OpenGL 中绘制的图像尺寸错误且带有黑框

java - 从阻塞进程中优雅退出

python - 在 Python (GAE) 中将字符串转换为日期时间对象?

c# - Informix 和 .NET 的时间和日期时间格式