Java 不使用格式化方法打印日期对象

Java 不使用格式化方法打印日期对象,java,date,simpledateformat,Java,Date,Simpledateformat,我正在使用SimpleDateFormat类设置模式,并使用parse方法将字符串解析为日期对象 但是,当我在不使用方法format()的情况下打印Date对象时: 我的结果是: 星期日12月30日00:00:00 UTC 1990 tl;博士 结果不可重复 您的结果无法复制。看 2017年1月1日星期日00:00:00 GMT java.time 您使用的是现在被java.time取代的麻烦的旧遗留类 LocalDate ld = LocalDate.parse( "2017-11-01" )

我正在使用
SimpleDateFormat
类设置模式,并使用
parse
方法将
字符串
解析为
日期
对象

但是,当我在不使用方法
format()
的情况下打印
Date
对象时:

我的结果是:

星期日12月30日00:00:00 UTC 1990

tl;博士 结果不可重复 您的结果无法复制。看

2017年1月1日星期日00:00:00 GMT

java.time 您使用的是现在被java.time取代的麻烦的旧遗留类

LocalDate ld = LocalDate.parse( "2017-11-01" ) 
ld.toString():2017-11-01


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。你可以在这里找到一些有用的课程,如、、和。

我无法复制这些课程-我得到2017年1月2日。但从根本上说,您想要的是
yyyy
,而不是
yyy
。当您在使用
SimpleDataFormat
时,首先要做的是根据文档非常非常仔细地检查格式字符串。(请注意,问题不在于生成的
Date
是如何格式化的,而在于解析。)好的解决方案是放弃早已过时且臭名昭著的
SimpleDateFormat
类,使用
java.time
LocalDate.parse(“2017-11-01”)
将为您提供您所期望的。短视的解决方案是在格式模式字符串中使用小写
yyy
而不是大写。谢谢,我的错误得到了解决。我将尝试使用java.time。
LocalDate.parse( "2017-11-01" ) 
SimpleDateFormat format = new SimpleDateFormat( "YYYY-MM-dd" );
Date dat1 = format.parse( "2017-11-01" );
System.out.println( dat1 );
LocalDate ld = LocalDate.parse( "2017-11-01" )