在java中将dateTime转换为dd / MM / yy格式的日期

我有一个JODA DateTime 2012-12-31T13:32:56.483+13:00 。 我想以dd/MM/yy格式将其转换为Date。 所以我期待代码返回日期,如 – 2012年12月31日。

代码 –

  // Input dateTime = 2012-12-31T13:32:56.483+13:00 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yy"); Date date = simpleDateFormat.parse(dateTime.toString("dd/MM/yy")); 

结果:

 Output - Mon Dec 31 00:00:00 NZDT 2012 Expected Output - 31/12/12 

当我执行以下操作时,我得到了预期的输出,但我不知道如何将其转换为Date-

 String string = simpleDateFormat.format(date); 

请帮帮我。

谢谢

编辑 – 我希望我的最终结果是以dd / MM / yy格式的Util Date。 我不想要String输出。 我的输入是Joda DateTime yyyy-MM-ddThh:mm:ss:+ GMT。 我需要将JodaDateTime转换为UtilDate。

正如我原先所说,Date对象没有固有的格式。 java.util.Date包含一个毫秒时间值,表示日期和时间。 日期通过您选择的DateFormat从字符串解析或格式化为字符串。

字符串可以按照规范进行格式化,但它们后面的Date对象始终是完全精确的,并且没有任何固有的格式概念。


要将组合的“日期和时间” java.util.Date截断为日期组件,请在午夜时将其有效地保留:

 public static Date truncateTime (Date date) { Calendar cal = Calendar.getInstance(); cal.setTime( date); cal.set( Calendar.HOUR_OF_DAY, 0); cal.set( Calendar.MINUTE, 0); cal.set( Calendar.SECOND, 0); cal.set( Calendar.MILLISECOND, 0); return cal.getTime(); } 

如果你来自JodaTime DateTime ,你可以更容易地在JodaTime API中工作。

 public static Date truncateJodaDT (DateTime dt) { java.util.Date result = dt.toDateMidnight().toDate(); return result; } 

希望这可以帮助!

看到:


现在我再次不确定,你想要什么。 您现在想要字符串格式的日期吗?

 return simpleDateFormat.format( date); // from java.util.Date 

或者使用JodaTime:

 return dateTime.toString( "dd/MM/yy"); // from org.joda.time.DateTime 

这是你如何做到的

 Format formatter = new SimpleDateFormat("dd/MM/yy"); String string = formatter.format(date); 

TL;博士

 OffsetDateTime.parse( "2012-12-31T13:32:56.483+13:00" ).toLocalDate() 

Joda-Time由java.time取代

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

ISO 8601

您的输入字符串采用标准ISO 8601格式。

默认情况下,java.time类使用标准格式,因此无需指定格式设置模式。

日期时间对象与字符串

正如接受的答案所解释的那样,您不应该将日期时间对象与可能在文本上表示其值的字符串混淆。 java.util.Date 对象没有格式,因为它没有文本 。 同样适用于java.time类。 您可以使用java.time对象来解析字符串或生成字符串,但该对象是不同的并且与字符串分开。

OffsetDateTime

将您的输入字符串解析为OffsetDateTime因为它包含与UTC的偏移量,但它缺少时区。

 OffsetDateTime odt = OffsetDateTime.parse( "2012-12-31T13:32:56.483+13:00" ); 

LocalDate

如果您想要一个仅限日期的值,请使用LocalDate类。 请记住,对于任何给定的时刻,日期在全球范围内按时区变化。 午夜过后一分钟是在巴黎新的一天,而在魁北克蒙特利尔仍然是“昨天”。 如果您想要相同偏移量为+13:00的日期,只需调用toLocalDate

 LocalDate localDate = odt.toLocalDate(); 

问题说你不想要一个字符串,只想要一个日期对象。 你去吧 如果您以后想要一个字符串,请调用toString以生成标准ISO 8601格式的字符串, 2012-12-31 。 对于其他格式,请搜索DateTimeFormatter Stack Overflow。


关于java.time

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

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

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

从哪里获取java.time类?

  • Java SE 8SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6SE 7
    • 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
  • Android的
    • ThreeTenABP项目特别适用于Android的ThreeTen-Backport (如上所述)。
    • 请参见如何使用ThreeTenABP ….

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

使用Java 8提供的日期时间类

 LocalDate parsedDate = LocalDate.parse(dateStr,DateTimeFormatter.ISO_ZONED_DATE_TIME);