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

时间:2013-12-13 03:59:17

标签: java date

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

使用“SimpleDateFormat”课,我们parse()format()可以使用我们的DateString

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

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

6 个答案:

答案 0 :(得分:1)

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

您只能使用SimpleDateFormat以所需格式获取日期的字符串表示。

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

答案 1 :(得分:0)

它已在toString()类的Date方法中修复,如果您严格需要此功能,则可以扩展Date

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果您真的希望能够传递同时具有日期和格式的对象,则可以创建自己的类,其中包含GregorianCalendarSimpleDateFormat字段。您可以为其提供toString方法,使用GregorianCalendar格式化SimpleDateFormat

答案 4 :(得分:0)

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

答案 5 :(得分:0)

避免遗留日期时间类

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

Instant

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

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

Instant instant = myUtilDate.toInstant();

ZonedDateTime

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

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

LocalDate

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

LocalDate ld = zdt.toLocalDate();

生成字符串

要以您请求的格式生成表示此LocalDate值的字符串,只需致电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.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

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