gpt4 book ai didi

java - 将日期从字符串解析为日期对象时出现 ParseException

转载 作者:行者123 更新时间:2023-12-01 16:47:07 26 4
gpt4 key购买 nike

我在将日期从 String 解析为 Date 对象时遇到 ParseException。日期字符串还包含时区。我正在使用这段代码:

final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
System.out.print(sdf.parse("2018-01-16T00:07:00.000+05:30"));

以下是我收到的错误:

Exception in thread "main" java.text.ParseException: Unparseable date: "2018-01-16T00:07:00.000+05:30"
at java.text.DateFormat.parse(DateFormat.java:366)

最佳答案

您在 SimpleDateFormat 中使用的格式必须与输入 String 匹配。

您的输入是2018-01-16T00:07:00.000+05:30,即ISO8601 compliant :

  • 年-月-日 (2018-01-16)
  • 后跟字母T
  • 后跟小时:分钟:秒.毫秒 (00:07:00.000)
  • 后跟 UTC offset (+05:30)

注意:偏移量+05:30不是时区。 Read this知道其中的区别。

无论如何,您使用的模式 ("yyyy-MM-dd HH:mm:ss z") 与输入字符串不匹配:

  • 日期和时间之间缺少 T
  • 缺少毫秒
  • 偏移量之前有一个空格
  • 解析偏移量的正确字母是 X (尽管我认为 z 可能有效,具体取决于您使用的 JVM 版本;在我的测试中,它没有't)

所以你的代码应该是:

// use "XXX" to parse the whole offset (only one "X" will parse just `+05`, missing the `:30` part)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date d = sdf.parse("2018-01-16T00:07:00.000+05:30");

但是,如果您可以使用新的 Java 8 类,那么使用它们会更好:

// parse ISO8601 compliant string directly
OffsetDateTime odt = OffsetDateTime.parse("2018-01-16T00:07:00.000+05:30");

如果您仍然需要使用 java.util.Date 对象,很容易转换:

// convert to java.util.Date
Date date = Date.from(odt.toInstant());

关于java - 将日期从字符串解析为日期对象时出现 ParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48518118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com