【问题标题】:String to ZonedDateTime and timestamp conversion format字符串到 ZonedDateTime 和时间戳转换格式
【发布时间】:2018-10-11 11:14:47
【问题描述】:

我正在使用一个 SQL Server,它有一个带有 dateTime 的列。 我想将用户输入字符串插入数据库,我尝试使用时间戳插入。

以下 Java 代码将 String 转换为 ZonedDateTime。

案例 1:

String ip="2018-05-01T06:47:35.422-05:00";
ZonedDateTime zdt = ZonedDateTime.parse(ip, DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(Timestamp.from(zdt.toInstant()));

输出是 2018-05-01 06:47:35.422

案例 2:

如果字符串 ip="2011-04-07T00:00:00.000-04:00"; 输出为 2011-04-06 23:00:00.0

第二种情况,为什么日期改到前一天,时间考虑偏移?

【问题讨论】:

标签: java sql-server


【解决方案1】:

下面是我试过的代码。请注意,由于我在 -7:00 时区,它会从时间字符串中指定的 -5:00 中减去额外的 2 小时。由于您没有看到偏移量,我假设您在 -5:00 时区。这就是为什么在您的第二种情况(-4:00 字符串)中,它必须减去额外的 1 小时,并将其放在前一天。

public static void main(String[] args) {
    String ip="2018-05-01T06:47:35.422-05:00";
    ZonedDateTime zdt = ZonedDateTime.parse(ip, DateTimeFormatter.ISO_ZONED_DATE_TIME);

    // my timezone is: -7:00
    System.out.println(zdt.toInstant());                 // 2018-05-01T11:47:35.422Z
    System.out.println(Timestamp.from(zdt.toInstant())); // 2018-05-01 04:47:35.422
}

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 1970-01-01
    • 2018-07-15
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多