解析java中的日期和时间

shi*_*011 3 java datetime parsing

我有时间格式(yyyy-mm-ddTHH:mm + 0:0000)..我需要将这种格式转换为mm-dd-yyyy hh:mm am/pm使用java程序...任何人帮我做这个...提前...

mor*_*rja 9

尝试这样的事情:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm+s:SSSS");
Date date = format.parse(dateString);
format = new SimpleDateFormat("MM-dd-yyyy hh:mm a");
dateString = format.format(date);
Run Code Online (Sandbox Code Playgroud)


Ole*_*.V. 5

这里\xe2\x80\x99是现代答案。SimpleDateFormat是 2011 年提出问题时的正确答案,但现在不再是 \xe2\x80\x99 了。旧的类被证明很麻烦,所以最终在 2014 年初出现了替代品。

\n\n

我对你的格式中的一些细节有点困惑。

\n\n
    \n
  • yyyy-mm-ddTHH:mm+0:0000看起来有点像 ISO 8601 偏移日期时间,但+0:0000应该是相对 UTC 的偏移量。我推测它可能是为了抵消h:mmss,但它是非标准的,而且我在其他地方从未见过。
  • \n
  • 您似乎要求小写的 am/pm 。这也是非标准的,并且不是内置于标准类中的。
  • \n
\n\n

我建议:

\n\n
    DateTimeFormatter sourceFormat\n            = DateTimeFormatter.ofPattern("uuuu-MM-dd\'T\'HH:mm\'+0:0000\'");\n    DateTimeFormatter targetFormat\n            = DateTimeFormatter.ofPattern("MM-dd-uuuu hh:mm a", Locale.ENGLISH);\n\n    String sourceTime = "2017-07-05T20:31+0:0000";\n    String convertedTime = LocalDateTime.parse(sourceTime, sourceFormat)\n            .format(targetFormat)\n            .toLowerCase(Locale.ENGLISH);\n\n    System.out.println(convertedTime);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这打印

\n\n
07-05-2017 08:31 pm\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现只需要+0:0000输入文字而不是试图解释它是最安全的。为了以小写形式生成pm,我在格式化后将整个字符串转换为小写。这个答案有一个不同的技巧。

\n\n

尝试在偏移中更灵活地使用小时、分钟和秒并理解它们可以是:

\n\n
    sourceTime = sourceTime.replaceFirst("(\\\\d:\\\\d{2})(\\\\d{2})$", "0$1:$2");\n    String convertedTime = OffsetDateTime.parse(sourceTime)\n            .format(targetFormat)\n            .toLowerCase(Locale.ENGLISH);\n
Run Code Online (Sandbox Code Playgroud)\n\n

转换replaceFirst为,当其前面是 ISO 8601 偏移量或符合 ISO 8601 偏移量0:0000时。这也适用于其他偏移量(只要小时是一位数;您可能想依次尝试一位数和两位数)。在具体代码中,我们在格式化时仍然忽略偏移量,但如果需要,它可以用于其他目的。00:00:00+-

\n\n

DateTimeFormatterLocalDateTime并且OffsetDateTime是 JSR-310 的一部分。它们内置于 Java 8 及更高版本中。您也可以通过ThreeTen Backport在 Java 6 和 7 中使用它们。还有一个针对 Android 的向后移植的特定版本ThreeTenABP

\n


Paŭ*_*ann 2

看一下java.text.SimpleDateFormat- 您将需要两个实例,一个用于解析,一个用于格式化。