日期格式返回错误的日期

时间:2013-06-25 05:42:24

标签: java date datetime date-conversion java.util.date

我正在尝试格式化Date对象并将该格式化的对象转换回Date类型对象
这是我的代码

SimpleDateFormat inputDf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz");
System.out.println("before format  "+invoiceDate);
invoiceDate=inputDf.parse(inputDf.format(invoiceDate));
System.out.println("after format "+inputDf.format(invoiceDate));
System.out.println("after parse "+invoiceDate);

从上面代码输出

before format : Mon Jan 14 10:55:40 IST 2013
after format  : Mon Jan 14 2013 10:55:40 IST
after parse   : Mon Jan 14 10:55:40 IST 2013

你可以看到我解析日期对象后它转换回原始格式(格式显示格式之前),但我希望Date对象像它出现在第二个打印行(格式化后)的东西是.format方法返回String not not一个Date对象,我该如何解决这个问题?

谢谢

3 个答案:

答案 0 :(得分:6)

Date对象未定义任何格式。 Date只是一个长时间的数字。 要修改其格式,您必须使用String对象,就像您在示例中所做的那样。

如果你分析你的例子:

    格式之前的
  • :显示Date提供的System.out.println的DEFAULT格式。
  • 格式化后:显示使用SimpleDateFormat后给出的格式。
  • 解析后:我们又是第一种情况。

答案 1 :(得分:1)

System.out.println("after parse "+invoiceDate);

在这里,您只是尝试打印Date对象。 Date对象本身没有任何格式。 类Date表示特定的时刻,精确到毫秒。因此我们使用DateFormat格式化打印Date对象时打印的输出字符串。要显示与第二个语句相同的输出,需要再次格式化。

System.out.println("after parse"+inputDf.format(invoiceDate));

查看Javadoc以实现Date的{​​{3}}:

  

将此Date对象转换为以下形式的字符串:

     

dow mon dd hh:mm:ss zzz yyyy

答案 2 :(得分:1)

这种行为是因为SimpleDateFomat并未强加于该日期。 SimpleDateFormat仅仅是从任何Date中获取格式化输出的模式,但它不会更改日期本身。 Date没有格式,所以

System.out.println("before format  "+invoiceDate);

默认为默认模式格式。

实际上,SimpleDateFormat正是实现您想要的方式,即每次需要时使用它来正确格式化输出。格式化日期对象可以表示它,String