在java中以格式获取日期类型对象

我们知道我们可以使用Java.util.DateCalender实例或使用GregorianCalendar实例获取日期。

使用类’ SimpleDateFormat ‘,我们可以parse()format()函数我们的DateString

我们知道使用parse()format()函数,我们只能将输出作为String

在java中是否有任何选项可以获取特定格式的Date实例,如’yyyy-MM-dd’或任何其他格式,但最终输出应该是具有此格式的Date类型?

日期根本没有格式。 它只是自标准基准时间(称为The Epoch)以来的时间表示,即1970年1月1日00:00:00 GMT

您只能使用SimpleDateFormat以所需格式获取Date的String表示forms。

此外,SDF的parse()方法将Date的String表示forms解析为Date对象。 format()是给出Date对象的格式化String表示的方法。

不在 Date类的toString()方法中修复它,如果您严格要求此function,可以扩展Date

您可以扩展java.util.Date类,并覆盖默认的toString()方法。 您可以实现Decorator模式(或适配器模式 – 我不确定是否真的有区别)。

对你的问题的简短回答是否定的。 DateGregorianCalendar类不包含格式 – 您必须单独使用格式,可以是StringSimpleDateFormat

如果你真的希望能够传递一个同时具有日期和格式的对象,你可以创建自己的类,它有一个GregorianCalendar和一个SimpleDateFormat作为字段。 你可以给它一个toString方法,使用SimpleDateFormat格式化GregorianCalendar

您的评论表明您错过了日期时间对象不是字符串的观点。 在java.util.Date和Joda-Time中 ,日期时间表示为自Epoch以来的毫秒数。 在Java 8 java.time。*中,日期时间可能是自Epoch以来的纳秒。 但这些都与字符串无关。 我们创建字符串作为输出,作为那些毫秒/纳秒的转换,对人类有意义。

避免遗留日期时间类

与最早版本的Java捆绑在一起的旧日期时间类设计糟糕,令人困惑且麻烦。 避免他们。 现在取代了java.time类。

Instant

正如其他人所说, java.util.Date表示UTC时间轴上的时刻,分辨率为毫秒。 java.util.Date根本没有格式。

您可以将Date对象转换为java.time.InstantInstant类表示UTC时间轴上的一个时刻,分辨率为纳秒 。

 Instant instant = myUtilDate.toInstant(); 

ZonedDateTime

指定在您的方案中获取日期的时区。 时区对于确定日期至关重要; 对于任何特定时刻,日期在全球范围内因地区而异。

 ZoneId z = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = instant.atZone( z ); 

LocalDate

现在,如果您想使用没有时间且没有时区的仅日期值,请从ZonedDateTime对象中提取LocalDate对象。

 LocalDate ld = zdt.toLocalDate(); 

生成字符串

要以您请求的格式生成表示此LocalDate值的String,只需调用toString 。 YYYY-MM-DD的格式是标准的ISO 8601格式。 在解析/生成字符串时,java.time类默认使用ISO 8601格式。 不要将格式化字符串与日期时间对象混淆。 日期时间对象没有格式 ,只有字符串具有格式。

 String output = ld.toString(); 

如果您需要其他格式,请搜索DateTimeFormatter类的Stack Overflow。

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧日期时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat

现在处于维护模式的Joda-Time项目建议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。

许多java.timefunction在ThreeTen- Backport中反向移植到Java 6和7,并在ThreeTenABP中进一步适应Android (请参阅如何使用… )。

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如IntervalYearWeekYearQuarter等。