为什么Java SimpleDateFormat()。parse()打印出奇怪的格式?

时间:2010-03-21 09:35:47

标签: java string datetime simpledateformat

我的输入是字符串格式如下:

3/4/2010 10:40:01 AM
3/4/2010 10:38:31 AM

我的代码是:

DateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy hh:mm:ss aa");
            try
            {
                Date today = dateFormat.parse(time);
                System.out.println("Date Time : " + today);

            }
            catch (ParseException e)
            {
                e.printStackTrace();
            }

输出是:

Sun Jan 03 10:38:31 AST 2010
Sun Jan 03 10:40:01 AST 2010

我不确定那天(太阳)来自哪里?还是(AST)?为什么日期错了?我只想保持原始字符串日期的相同格式,并将其设置为日期对象。

我正在使用Netbeans 6.8 Mac版。

5 个答案:

答案 0 :(得分:7)

应该是MM,而不是mm。小写mm是几分钟,而不是几个月。

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aa");

答案 1 :(得分:4)

MM,而不是mm几个月。您正在使用mm两次 - 从逻辑上讲,这是相同的事情 - 分钟。

答案 2 :(得分:3)

如果要以原始格式打印日期,请使用格式化方法:

System.out.println("Date Time : "+ dateFormat.format(today));

“怪异”格式来自Date的toString实现,javadoc说:

将此Date对象转换为以下形式的String:

dow mon dd hh:mm:ss zzz yyyy

"I just wanted to keep the same format of the original String date and make it into a Date object."

日期对象旨在表示特定的时刻,您不能将原始字符串的格式保留在其中,这就是我们拥有DateFormat类的原因。

答案 3 :(得分:2)

答案很简单。您已显示今天的Date.toString()值,而不是预期的dateFormat版本。你需要的是:

System.out.println("Date Time : " + dateFormat.format(today) );

答案 4 :(得分:1)

使用System.out.println()打印日期会导致在Date对象上调用toString()方法。

toString()中使用的格式字符串是导致星期几和时区出现在输出中的原因。

这与Duffy指出的解析错误不同。