[英]Convert dateTime to date in dd/MM/yy format in java
我有一个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);
OffsetDateTime.parse( "2012-12-31T13:32:56.483+13:00" ).toLocalDate()
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您的输入字符串采用标准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 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的类,比如Interval
, YearWeek
, YearQuarter
,和更多 。
使用Java 8提供的日期时间类
LocalDate parsedDate = LocalDate.parse(dateStr,DateTimeFormatter.ISO_ZONED_DATE_TIME);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.