在java中以格式获取日期类型对象
我们知道我们可以使用Java.util.Date
或Calender
实例或使用GregorianCalendar
实例获取日期。
使用类’ SimpleDateFormat
‘,我们可以parse()
或format()
函数我们的Date
或String
。
我们知道使用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模式(或适配器模式 – 我不确定是否真的有区别)。
对你的问题的简短回答是否定的。 Date
和GregorianCalendar
类不包含格式 – 您必须单独使用格式,可以是String
或SimpleDateFormat
。
如果你真的希望能够传递一个同时具有日期和格式的对象,你可以创建自己的类,它有一个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.Instant
。 Instant
类表示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
, .Calendar
和java.text.SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。
许多java.timefunction在ThreeTen- Backport中反向移植到Java 6和7,并在ThreeTenABP中进一步适应Android (请参阅如何使用… )。
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。