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 等类,使日期处理更加容易。
示例:
<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(); 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);</code>
此代码转换 UNIX时间戳转换为 LocalDateTime,可以直接插入 MySQL 数据库。
结论:
通过利用 java.time 并将日期对象而不是字符串传递给 MySQL,您可以消除格式问题并确保日期转换的准确性。
以上是将 UNIX 时间戳转换为日期时,为什么 SimpleDateFormat.parse 的输出与指定的不同?的详细内容。更多信息请关注PHP中文网其他相关文章!