【问题标题】:How to convert getTime() to 'YYYY-MM-DD HH24:MI:SS' [duplicate]如何将getTime()转换为'YYYY-MM-DD HH24:MI:SS' [重复]
【发布时间】:2018-05-28 12:31:27
【问题描述】:

我的应用程序中有以下代码

System.out.println(rec.getDateTrami().getTime());

我需要转换以下格式(我猜是秒)

43782000
29382000
29382000

转成YYYY-MM-DD HH24:MI:SS的格式,谁能帮帮我?

【问题讨论】:

  • rec.getDateTrami() 是否返回 Date 对象?询问是因为 Date 类早已过时,而今天我们在 java.time, the modern Java date and time API 中的表现要好得多。如果您可以更改 getDateTrami() 以返回现代类之一的实例,您应该更喜欢这样。
  • 请为了您自己(以及我们自己)的缘故,在询问之前进行搜索和研究。如何在 Java 中格式化日期时间已经在很多地方进行了介绍,无论是在 Stack Overflow 上还是在其他地方。搜索时只有一个警告词:避免提及SimpleDateFormat 的解决方案。如今,该课程早已过时并且出了名的麻烦。
  • @CodeMatrix SimpleDateFormat 正是要避免的类。正如您的链接所表明的那样,如果您使用的是 Java 8,则更是如此。不管是什么Java版本,那个类都很麻烦。
  • jc1992,你的数字在我眼里并不像秒,你确定吗?您是否知道它们应该对应于哪些日期时间,大约在几年内?

标签: java datetime-format seconds


【解决方案1】:

您可以使用 SimpledateFormat。

new SimpleDateFormat("YYYY-MM-DD HH24:MI:SS").format(date)

【讨论】:

  • 那行不通(你应该避免使用SimpleDateFormat)。
【解决方案2】:

您可以使用SimpleDateFormat

例子:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
date.setTime(rec.getDateTrami().getTime());
System.out.println(format.format(date));

文档: SimpleDateFormat, DateFormat

【讨论】:

【解决方案3】:

使用java.time

最好将getDateTrami() 更改为从java.time 返回OffsetDateTimeZonedDateTimejava.time 是现代 Java 日期和时间 API。它也被称为 JSR-310。无论返回上述两种类型中的哪一种,代码都是相同的:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    System.out.println(rec.getDateTrami().format(formatter));

这会打印日期和时间

2017-12-14 16:52:20

java.time 通常比过时的 Date 类及其朋友更好用。

如果您无法更改返回类型

我假设getDateTrami() 返回一个java.util.Date。由于Date 类早已过时,首先要做的就是将其转换为java.time.Instant。从那里您可以执行进一步的操作:

    Date oldfashionedDateObject = rec.getDateTrami();
    ZonedDateTime dateTime = oldfashionedDateObject.toInstant()
            .atZone(ZoneId.of("Atlantic/Cape_Verde"));
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    System.out.println(dateTime.format(formatter));

结果当然和上面类似。我故意明确说明我想在哪个时区解释时间点。如果不是 Atlantic/Cape_Verde,请替换您自己的。

格式化自纪元以来的秒数

    int seconds = 29_382_000;
    ZonedDateTime dateTime = Instant.ofEpochSecond(seconds)
            .atZone(ZoneId.of("Atlantic/Cape_Verde"));
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    System.out.println(dateTime.format(formatter));

这个 sn-p 打印

1970-12-06 23:40:00

1970 年 12 月的日期。如果这是不正确的,那是因为 29 382 000 并不表示自 1970 年 1 月 1 日 UTC 午夜以来的秒数,也称为 Unix 纪元。这是迄今为止测量秒数的最常见时间。如果你的秒数是从其他固定时间点测量的,我猜不出是哪个,你有工作要做。再次决定您要指定哪个时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2011-10-22
    • 2011-03-18
    相关资源
    最近更新 更多