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

Posted

技术标签:

【中文标题】在java中将dateTime转换为dd/MM/yy格式的日期【英文标题】:Convert dateTime to date in dd/MM/yy format in java 【发布时间】:2013-09-26 12:12:14 【问题描述】:

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

代码 -

    // 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。我不想要字符串输出。我的输入是 Joda DateTime yyyy-MM-ddThh:mm:ss:+GMT。我需要将 JodaDateTime 转换为 UtilDate。

【问题讨论】:

是的。我也不喜欢它,但 db 在我的模式中只允许 2 位数的年份。此外,对于 4 位数年份,我也遇到了同样的错误。 日期本身没有格式。可以通过指定的 DateFormat 将日期格式化为/或从字符串解析,但它本身并不具有格式。 我正在尝试转换 JodaTime -> java.util.Date 并截断时间组件并以 dd/MM/yy 格式获取结果日期。谢谢 太棒了!我将在下面编辑我的答案。谢谢萨拉。 可能这就是您要找的东西? ***.com/questions/5050170/… 【参考方案1】:

正如我最初所说,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

【讨论】:

我的日期变量将 Mon Dec 31 00:00:00 NZDT 2012 作为输出。当我进行格式化时,我得到了正确的格式,但如何转换为日期? date 是一个日期。格式化将其转换为字符串。所以你已经正确解析了日期!如果你真的想要,你可以将 String 解析回 Date.. 但你已经做过一次了 :) 我知道使用格式将日期转换为字符串。在那之前,当我做 date = simpleDateFormat.parse(dateTime.toLocalDate().toString("dd/MM/yy"));我得到 Mon Dec 31 00:00:00 NZDT 2012 但我希望它能给我 31/12/12... :( 你的问题很不清楚。我已经编辑了我的帖子以包含您可能尝试做的其他事情,但是也许您应该正确地告诉我们您想要实现的目标。您想要什么数据类型的结果以及您打算如何/在哪里使用它? @Sara:正如 Thomas 之前在 cmets 中所说,Date 对象本身没有格式。因此,不可能“拥有dd/MM/yy 格式的Date 对象”。您在将Date 转换为String 以进行格式化时指定格式。 SimpleDateFormat 对象知道格式,但不知道 Date 对象本身。【参考方案2】:

这是你的做法

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

【讨论】:

【参考方案3】:

tl;博士

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

Joda-Time 被 java.time 取代

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

ISO 8601

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

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

日期时间对象与字符串

正如the accepted Answer 解释的那样,您不应将日期时间对象与可能在文本上表示其值的字符串混为一谈。 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。对于其他格式,请在 Stack Overflow 中搜索 DateTimeFormatter


关于java.time

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

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

从哪里获得 java.time 类?

Java SE 8SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门针对 android 改编了 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuarter 和more。

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于在java中将dateTime转换为dd/MM/yy格式的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中将时间戳转换为 MySQL DateTime?

在 pandas.Series 中将时间戳转换为 datetime.datetime

在查询中将 DateTime.Ticks 转换为 MySQL DateTime

在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta

在 PHP 中将 DOMTimeStamp 转换为 DATETIME

如何在 C# 中将字符串转换为 DateTime?