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

Convert dateTime to date in dd/MM/yy format in java

我有一辆Joda DateTime2012-12-31T13:32:56.483+13:00。我想把它转换成dd/MM/yy格式的日期。所以我希望代码能返回-31/12/12这样的日期。

代码-

1
2
3
    // 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"));

结果:

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

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

1
String string = simpleDateFormat.format(date);

请帮帮我。

谢谢

编辑-我希望最终结果是dd/mm/yy格式的使用日期。我不想要字符串输出。我的输入是joda datetime yyyy-mm ddthh:mm:ss:+gmt。我需要将jodadatetime转换为utildate。


这是你的做法

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

正如我最初所说,日期对象没有固有的格式。java.util.Date持有毫秒时间值,表示日期和时间。通过选择日期格式,可以将日期从字符串解析为字符串,或将其格式化为字符串。

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

将"日期和时间"java.util.Date组合截断为"日期"组件,使其在午夜有效:

1
2
3
4
5
6
7
8
9
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中工作。

1
2
3
4
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 todatemiddy())
  • http://joda time.sourceforge.net/apidocs/org/joda/time/base/abstractinstant.html_todate()。

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

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

或使用jodatime:

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


DR

1
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,因为它包括与UTC的偏移量,尽管它没有时区。

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

埃多克斯1〔6〕

如果您需要仅限日期的值,请使用LocalDate类。记住,在任何给定的时刻,日期都会随着时区的不同而在全球范围内变化。午夜过后的一分钟是巴黎的新一天,而在蒙特勒魁北克仍然是"昨天"。如果您想要从同一个偏移量的+13:00开始计算日期,只需调用toLocalDate

1
LocalDate localDate = odt.toLocalDate();

问题是您不需要字符串,只需要日期对象。那就这样吧。如果以后需要字符串,请调用toString以生成标准ISO 8601格式的字符串,2012-12-31。对于其他格式,搜索DateTimeFormatter的堆栈溢出。

关于java.time

JavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendar、&SimpleDateFormat

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

要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。

在哪里获取java.time类?

  • Java SE 8和SE 9及以后
    • 内置。
    • 标准JAVA API的一部分与捆绑实现。
    • Java 9增加了一些次要的特性和修复。
  • Java SE 6和SE 7
    • 大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
  • 安卓
    • threetenabp项目专门为Android调整threeten backport(如上所述)。
    • 看看如何使用三连珠……

threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。


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

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