1

我正在尝试格式化 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 方法返回字符串而不是 Date 对象, 我怎样才能解决这个问题 ?

谢谢

4

3 回答 3

6

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

如果你分析你的例子:

  • before format:显示提供的默认Date格式System.out.println
  • after format:显示使用SimpleDateFormat.
  • 解析后:我们又是第一种情况。
于 2013-06-25T05:46:28.043 回答
1

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

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

默认为默认模式格式。

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

于 2013-06-25T05:52:25.467 回答
1
System.out.println("after parse "+invoiceDate);

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

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

查看 Javadoc 以实现toString() for Date

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

dow mon dd hh:mm:ss zzz yyyy

于 2013-06-25T05:49:14.233 回答