在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; }
希望这可以帮助!
看到:
- http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html#toDateMidnight()
- http://joda-time.sourceforge.net/apidocs/org/joda/time/base/AbstractInstant.html#toDate()
现在我再次不确定,你想要什么。 您现在想要字符串格式的日期吗?
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.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
从哪里获取java.time类?
- Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和SE 7
- 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
- Android的
- ThreeTenABP项目特别适用于Android的ThreeTen-Backport (如上所述)。
- 请参见如何使用ThreeTenABP ….
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。
使用Java 8提供的日期时间类
LocalDate parsedDate = LocalDate.parse(dateStr,DateTimeFormatter.ISO_ZONED_DATE_TIME);