gpt4 book ai didi

java - SimpleDateFormat 返回 12 小时前 5.30 到 6.30 之间的时间

转载 作者:行者123 更新时间:2023-11-29 12:01:46 25 4
gpt4 key购买 nike

我们正在使用 SimpleDateFormat 将日期时间转换为以毫秒为单位的时间下面是我们用于转换的代码

下面是我从数据库中获取的日期时间格式

"2019-04-04 12:24:53.754787+00" 

代码:

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd 
hh:mm:ss");
Date date = null;
try {
date = sdf.parse(dateTime);
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long timeInMilis = date.getTime();
return timeInMilis;

它以毫秒为单位返回正确的时间戳。除了 5.30 pm 到 6.30 pm 它返回 12 小时延迟为什么它返回错误的时间戳?还是他们有任何其他方式来进行转换?

最佳答案

首先,不要将日期时间作为字符串存储在 PostgreSQL 中,也不要从数据库中检索与显示的字符串类似的字符串。存储正确的日期/时间类型;在您的情况下可能是 timestamp with time zone。而不是检索字符串,而是获取相应的 Java 日期时间类型。例如:

    PreparedStatement select = yourDatabaseConnection
.prepareStatement("select ts from your_table where id = 4;");
ResultSet rs = select.executeQuery();
if (rs.next()) {
OffsetDateTime dateTime = rs.getObject("ts", OffsetDateTime.class);
long milliseconds = dateTime.toInstant().toEpochMilli();
// Do something with milliseconds
}

(我没有测试这个片段,因为我还没有安装 PostgreSQL。)

如果出于某种原因您无法避免获取字符串:

    DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSSx");
String stringFromDatabase = "2019-04-04 12:24:53.754787+00";
OffsetDateTime dateTime
= OffsetDateTime.parse(stringFromDatabase, formatter);
long milliseconds = dateTime.toInstant().toEpochMilli();
System.out.println(milliseconds);

这个片段我试过运行。输出是:

1554380693754

由于 PostgreSQL 存储微秒精度和毫秒,因为纪元显然不存储,所以我们丢失了原始值的最后三位小数。

我正在使用并推荐 java.time,现代 Java 日期和时间 API。您尝试使用的日期时间类 — SimpleDateFormatDate — 早已过时且设计不佳。所以要避免这些。

你的代码出了什么问题?

  • 其他人已经指出,为了解析您的字符串,您需要使用大写字母 HH 表示一天中从 00 到 23 的小时。小写 hh 表示从 AM 或 PM 开始的小时01 到 12。由于 12 AM 表示 00,解析 12 的小时会给出您观察到的错误结果,而其他小时值有效。
  • 另一方面,单个 M 在这种情况下并不重要,它与 MM 的解析相同(为了格式化我们需要 MM 如果我们总是想要两位数字,就像在您的示例字符串中一样)。
  • 您既没有解析秒的小数部分,也没有解析 +00 的 UTC 偏移量。尽管如此,如果您得到了大致正确的结果,那您就太幸运了,不应指望其他计算机或具有其他默认设置的 JVM 也会出现这种情况。

链接

关于java - SimpleDateFormat 返回 12 小时前 5.30 到 6.30 之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55519880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com