”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 将 UNIX 时间戳转换为日期时,为什么 SimpleDateFormat.parse 的输出与指定的不同?

将 UNIX 时间戳转换为日期时,为什么 SimpleDateFormat.parse 的输出与指定的不同?

发布于2024-11-09
浏览:829

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

SimpleDateFormatter.parse 输出与指定不同

使用 SimpleDateFormat 将 UNIX 时间戳转换为日期时,您可能会遇到指定格式与实际格式之间的差异输出。

在给定的示例中,目标是将 UNIX 时间戳(“a1527069600”)转换为“dd/MM/yyyy hh:mm:ss a”格式的日期。但是,使用 SimpleDateFormatter.format 后跟 SimpleDateFormatter.parse 会产生不同的输出。

差异原因

出现差异的原因是 SimpleDateFormatter.parse 期望字符串格式准确实例化期间指定的格式(“dd/MM/yyyy hh:mm:ss a”)。在这种情况下,SimpleDateFormatter.format 输出的日期格式与预期的输入格式不同,导致解析操作失败。

解决方案

避免此问题,建议不要将日期字符串传递给 MySQL 数据库。相反,请使用日期对象。现代 Java 日期和时间 API java.time 提供了 LocalDateTime 等类,使日期处理更加容易。

示例:

String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);

这段代码将UNIX时间戳转换为LocalDateTime,可以直接插入MySQL数据库。

结论:

通过利用java.time并将日期对象而不是字符串传递给MySQL,您可以消除格式问题并确保日期转换的准确性。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3