Java 日期格式返回错误的日期

Java 日期格式返回错误的日期,java,date,datetime,date-conversion,java.util.date,Java,Date,Datetime,Date Conversion,Java.util.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("aft

我正在尝试格式化日期对象,并将格式化后的对象转换回日期类型对象
这是我的密码

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
在我解析日期对象后,您可以在这里看到它转换回原始格式(格式之前显示的格式),但我希望日期对象像它出现在第二个打印行(格式之后)一样。format方法返回字符串而不是日期对象,我如何修复此问题


谢谢

日期对象没有定义任何格式<代码>日期只是一个包含时间的长数字。 为了修改其格式,您必须使用
字符串
对象,就像您在示例中所做的那样

如果您分析您的示例:

  • before format:显示
    System.out.println
    提供的
    日期的默认格式
  • 格式后:显示使用
    simpleDataFormat
    后给出的格式
  • 解析后:在第一种情况下,我们又是

日期对象未定义任何格式<代码>日期
只是一个包含时间的长数字。 为了修改其格式,您必须使用
字符串
对象,就像您在示例中所做的那样

如果您分析您的示例:

  • before format:显示
    System.out.println
    提供的
    日期的默认格式
  • 格式后:显示使用
    simpleDataFormat
    后给出的格式
  • 解析后:在第一种情况下,我们又是
在这里,您只是想打印
日期
对象。
Date
对象本身没有任何格式。类日期表示特定的时间瞬间,精度为毫秒。因此,我们使用
DateFormat
格式化输出字符串,该字符串在打印
Date
对象时打印。要显示与第二条语句相同的输出,需要重新格式化它

System.out.println("after parse"+inputDf.format(invoiceDate));
查看Javadoc以了解for
日期的实现:

将此日期对象转换为以下格式的字符串:

道琼斯指数周一至日hh:mm:ss zzz yyyy

在这里,您只是想打印
日期
对象。
Date
对象本身没有任何格式。类日期表示特定的时间瞬间,精度为毫秒。因此,我们使用
DateFormat
格式化输出字符串,该字符串在打印
Date
对象时打印。要显示与第二条语句相同的输出,需要重新格式化它

System.out.println("after parse"+inputDf.format(invoiceDate));
查看Javadoc以了解for
日期的实现:

将此日期对象转换为以下格式的字符串:

道琼斯指数周一至日hh:mm:ss zzz yyyy


这种行为是因为
SimpleDateFomat
不会将其自身强加在日期上。
SimpleDateFormat
只是从任何
Date
中获取格式化输出的模式,但它不会更改日期本身<代码>日期
没有格式,因此

System.out.println("before format  "+invoiceDate);
默认为默认模式格式


实际上,
SimpleDateFormat
正是实现您所需的方式,即在每次需要时使用它来正确格式化输出。格式化日期对象会为您提供它的表示形式,即
字符串

此行为是因为
SimpleDataFomat
不会将其自身强加给日期。
SimpleDateFormat
只是从任何
Date
中获取格式化输出的模式,但它不会更改日期本身<代码>日期
没有格式,因此

System.out.println("before format  "+invoiceDate);
默认为默认模式格式


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

我希望最终输出为日期对象(而不是字符串)和我的格式(“EEE-MMM-dd-yyyy-HH:mm:ss-zzz”),在这种情况下我怎么做?我希望最终输出为日期对象(而不是字符串)和我的格式(“EEE-MMM-dd-yyyyy-HH:mm:ss-zzz”)在这种情况下,我该怎么做呢?我能理解你在说什么,那么我该如何更改给定日期的格式而不将其转换为字符串?我想更改在db中使用它的格式query@user1573690:您可以在db查询中使用任何格式,是否要插入记录,如果是这样,日期格式不重要即使不能与MongoDB一起使用,但格式应该是无关的,因为日期格式是输出表示,而不是日期对象的不同版本。日期对象没有特定的格式。我可以理解您所说的内容,那么如何更改给定日期的格式而不将其转换为字符串?我想更改在db中使用它的格式query@user1573690:您可以在db查询中使用任何格式,是否要插入记录,如果是这样,日期格式不重要即使不能与MongoDB一起使用,但格式应该是无关的,因为日期格式是输出表示,而不是日期对象的不同版本。日期对象没有特定的格式。