【问题标题】:JAVA: parse date with timezone [duplicate]JAVA:用时区解析日期[重复]
【发布时间】:2018-06-26 08:02:58
【问题描述】:

我在互联网和 StackOverFlow 上阅读了很多建议,但我仍然不明白为什么我会在此日期解析中遇到此问题。 有人可以帮忙吗?

我的代码:

String date = " Aug 24 18:29:51 2017 GMT ";
System.out.println("@"+date+"@");
DateFormat format = new SimpleDateFormat(" MMM dd HH:mm:ss yyyy z ");
Date data = format.parse(date);
System.out.println("#"+data+"#");

输出:

@ Aug 24 18:29:51 2017 GMT @
java.text.ParseException: Unparseable date: " Aug 24 18:29:51 2017 GMT "
at java.text.DateFormat.parse(DateFormat.java:366)
...
...

【问题讨论】:

  • 相信您会在this stack找到问题的答案
  • 您确定这是您实际运行的代码的良好表示吗?这个 sn-p 在我的机器上工作得很好。
  • 此代码运行良好,请检查您的导入 java.util.Date 等
  • 如果你读过很多书,那么你也读过应该避免使用SimpleDateFormat 类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 的表现要好得多。

标签: java date


【解决方案1】:

您的默认Locale 似乎与八月的英文单词不符。

你可能想强制英文Locale

DateFormat format = new SimpleDateFormat(" MMM dd HH:mm:ss yyyy z ", Locale.ENGLISH);

【讨论】:

  • 我自己没有其他解释,但 OP 的语言环境无法解析它自己格式化的日期似乎很奇怪。
  • @kumesana - 你如何从这个问题中得出结论?
  • @rustyx 误读了它。出于某种原因,我一度认为代码将日期格式化为“八月”。我错了。
  • @MattVegas 你是什么意思为什么它是相关的?在法语中,八月写成 Août。如您所见,当想要用这种语言描述 August 时,没有理由出现“g”。因此,有些语言无法将“八月”解析为八月,也不能解析为任何语言。这应该很明显。
  • @MattVegas :这只是Date.toString() 显示的时区(请参阅stackoverflow.com/questions/4199217/…),该值没有任何问题,但您可能需要创建另一个DateFormat 来格式化@987654327 @ 到你想要的输出。
【解决方案2】:

您能否使用 Locale.getDefault() 检查您的语言环境。您可能必须将其设置为英语。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2021-06-22
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多