【问题标题】:SimpleDateFormatter.parse giving output in different format than specifiedSimpleDateFormat.parse 以与指定格式不同的格式提供输出
【发布时间】:2018-05-23 18:11:50
【问题描述】:

我需要获取 UNIX 时间戳(字符串),将其转换为特定格式的日期,并将其存储在 MySQL 数据库中的 DATETIME 列中。

这是我的一段代码(简化):

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");
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)));

控制台输出:

SDF.Format - 23/05/2018 03:30:00 PM <br>
SDF.parse - Wed May 23 15:30:00 IST 2018

当我尝试将这个值推送到 MySQL 数据库中时,它会抛出 Invalid DateError。

只是对为什么sdf.formatsdf.parse 以不同格式显示时间戳感到困惑。

【问题讨论】:

  • 你的 MySQL 列的数据类型是什么?询问是因为您可能可以推送 LocalDateTimeInstant 对象,而根本不用担心格式。无论如何,我建议您避免使用SimpleDateFormat 课程。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。
  • return date type with format in java 的可能重复项。
  • Mysql 列类型 DATETIME,感谢有关最新日期时间 API 的建议,我想我应该简单地摆脱 sdf 类。我将尝试利用新的 API - Abhijeet

标签: java mysql


【解决方案1】:

不要将日期作为字符串传递给您的 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);

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

得到的LocalDateTime是:

2018-05-23T15:30

我稍微简化了您从纪元字符串的转换。使用原始的小写 long 而不是 Long 对象。我使用你的时区,亚洲/加尔各答,假设你的数据库值在这个时区。正常的建议是将数据库值保持为 UTC,至少在数据有可能在您的时区之外使用的情况下是这样。如果您需要,请使用此转换而不是上述转换:

    LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();

链接:Oracle tutorial: Date Time解释如何使用java.time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多