【问题标题】:Why is "2012-30-03" parsed as June 3 2014 with DateFormat?为什么使用 DateFormat 将“2012-30-03”解析为 2014 年 6 月 3 日?
【发布时间】:2012-03-29 16:59:33
【问题描述】:

我有一个字符串(例如:2012-30-03 12:30),我正在尝试使用以下代码:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
this.startTime = (Date) df.parse(startTime); // startTime = "2012-30-03 12:30"

但是当我尝试以下操作时:

System.out.println(this.startTime);

打印以下内容

2014 年 6 月 3 日星期二 12:30:00 CEST

这到底是怎么回事?

有没有更好的方法将我拥有的字符串类型转换为工作日期对象?

【问题讨论】:

  • 我几乎全面使用 joda 时间:joda-time.sourceforge.net
  • 请看Joda Time。特别是this section
  • 虽然可以说应该提出一个例外,但如果一个时间 30 个月3 天 2012 年过去。无论如何,请尽量以更客观的形式写问题。
  • 正确记下日期——它是如何工作的?

标签: java date date-format


【解决方案1】:

我觉得

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

应该是

DateFormat df = new SimpleDateFormat("yyyy-dd-MM HH:mm");

基于您提供的示例字符串 (2012-30-03 12:30)。

把你对日期类的愤怒集中在验证基础知识上,你会没事的。 ;)

【讨论】:

  • 这可能是错误的示例字符串。没有人使用年-日-月格式。它可以是年-月-日、月-日-年或日-月-年。
  • 可能,但我只能根据所写信息进行诊断。此外,除了非标准日期格式之外,我还在软件中看到过更奇怪的东西。
  • 我可以从这里听到掌声 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2014-12-18
  • 1970-01-01
相关资源
最近更新 更多