为什么 SimpleDateFormat.parse 在转换 UNIX 时间戳时会产生意外的输出?

Barbara Streisand
发布: 2024-10-27 16:26:29
原创
707 人浏览过

Why Does SimpleDateFormat.parse Produce Unexpected Output When Converting UNIX Timestamps?

SimpleDateFormatter.parse 的不同输出格式

在 Java 程序中,SimpleDateFormat 类用于将日期转换为指定格式。但是,据观察,在某些情况下,使用 SimpleDateFormatter.parse 解析日期可能会产生与格式化期间指定的格式不同的格式。

将 UNIX 时间戳转换为日期字符串时会出现此问题。这是一个简化的示例:

<code class="java">String ep ="a1527069600";
Long epoch = Long.parseLong(ep.substring(1, ep.length()));
Date dt = new Date(epoch*1000L);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));

System.out.println("SDF.Format - "+sdf.format(dt));
System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
登录后复制

在此示例中,虽然为 sdf 指定的格式为“dd/MM/yyyy hh:mm:ss a”,但 sdf.parse 的输出采用不同的格式,“Wed May 23 15:30:00 IST 2018。”

解决方案

要解决此问题,请避免将日期字符串传递到 MySQL 数据库。相反,请使用日期对象。 Java 提供了 java.time API 用于现代日期和时间处理。对于您的特定场景,您可以使用 LocalDateTime 对象:

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

    PreparedStatement ps = myDatabaseConnection.prepareStatement(
            "insert into my_table (my_date_time) values (?)");
    ps.setObject(1, ldt);</code>
登录后复制

此方法可确保一致的日期格式并消除 SimpleDateFormatter.parse 遇到的解析问题。

以上是为什么 SimpleDateFormat.parse 在转换 UNIX 时间戳时会产生意外的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!