我正在尝试格式化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对象,我该如何解决这个问题?
谢谢
答案 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
。