首页 > 解决方案 > 如何在 java 中从 10-JUN-02 01.57.07.848594000 PM 转换为 yyyy-MM-dd-HH24.MI.SS.FF6

问题描述

如何在 java 中从 10-JUN-02 01.57.07.848594000 PM 转换为 yyyy-MM-dd-HH24.MI.SS.FF6

标签: javadatetime-formatdatetime-parsing

解决方案


首先看一下

您的问题并不独特,也不是不常见的,在研究您的问题时进行一些尽职调查将获得更高的回报。

您的基本问题实际上是两个问题:

  • 如何将 a 解析String为日期/时间对象
  • 如何格式化日期/时间对象

我很欣赏在这个时代至少有 3 种不同的方法可以解决这些问题。但是,Java 8 中引入的日期/时间 API 应该是您的首选方法。

话虽如此,您可能会遇到两个主要的绊脚石来让某些东西发挥作用。

两者都与您的输入(JUNpm)的不常见情况有关。

Java 8 引入了DateTimeFormatterBuilder可以用来克服这个问题的类。

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a")
        .toFormatter(Locale.ENGLISH);

LocalDateTime ldt = LocalDateTime.parse("10-JUN-02 01.57.07.848594000 pm", dtf);

这将为您提供输入的日期/时间表示。

然后,您只需要另一个DateTimeFormatter来根据需要格式化输出......

DateTimeFormatter output = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS", Locale.ENGLISH);
System.out.println(output.format(ldt));

哪个输出...

2002-06-10-13.57.07.848594

确保您已阅读JavaDocsDateTimeFormatter以更好地理解格式化程序规范


推荐阅读