繁体   English   中英

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

[英]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);

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类?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM