10

我真的在这个问题上摸不着头脑。我已经使用SimpleDateFormats 一段时间了,但现在,使用 SimpleDateFormat 解析日期是(仅有时)完全错误的。

具体来说:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse("2009-08-19 12:00:00");
System.out.print(date.toString());

打印字符串Wed Aug 19 00:00:00 EDT 2009。有没有搞错?- 它甚至不会一直解析到错误的日期!


更新:这很好地修复了它。你不知道吗,这在其他一些地方也被滥用了。一定喜欢调试别人的代码:)

4

4 回答 4

24

我认为您想使用HH格式,而不是“hh”,以便您使用 00-23 之间的时间。'hh' 采用以 12 小时为增量的格式,因此它假定它在 AM 中。

所以这

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2009-08-19 12:00:00");
System.out.print(date.toString());

应该打印出来

2009 年 8 月 19 日星期三 12:00:00 EDT

于 2009-08-21T17:43:26.643 回答
3

小时应指定为 HH 而不是 hh。查看http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html中有关日期和时间模式的部分

于 2009-08-21T17:49:24.727 回答
2

您正在打印日期的 toString() 表示,而不是格式的表示。您可能还想检查小时表示。H 和 h 的意思不同。H 代表 24 小时制 (0-23),h 代表 12 小时制 (1-12),(还有 k 和 K 分别代表 1-24 和 0-11 的时间)

您需要执行以下操作:

//in reality obtain the date from elsewhere, e.g. new Date()
Date date = sdf.parse("2009-08-19 12:00:00"); 

//this format uses 12 hours for time
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//this format uses 24 hours for time
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.print(sdf.format(date));
System.out.print(sdf2.format(date));
于 2009-08-21T17:40:15.540 回答
1
于 2016-08-20T18:44:28.477 回答