我正在使用一个带有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
在第二种情况下,为什么日期会改变为前一天,而时间正在考虑抵消?
答案 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
}