字符串到ZonedDateTime和时间戳转换格式

时间:2018-05-01 11:59:24

标签: java sql-server

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

以下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:

如果String ip =" 2011-04-07T00:00:00.000-04:00&#34 ;; 输出是2011-04-06 23:00:00.0

在第二种情况下,为什么日期会改变为前一天,而时间正在考虑抵消?

1 个答案:

答案 0 :(得分:2)

以下是我试过的代码。请注意,由于我在-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
}