栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-将java.time.Instant转换为java.sql.Timestamp,不带区域偏移

我将计算机的时区更改为欧洲/布加勒斯特以进行实验。这是UTC + 2小时(与您的时区一样)。

现在,当我复制您的代码时,得到的结果类似于您的结果:

    Instant now = Instant.now();    System.out.println(now); // prints 2017-03-14T06:16:32.621Z    Timestamp current = Timestamp.from(now);    System.out.println(current); // 2017-03-14 08:16:32.621

输出以注释形式给出。但是,我继续:

    DateFormat df = DateFormat.getDateTimeInstance();    df.setTimeZone(TimeZone.getTimeZone("UTC"));    // the following prints: Timestamp in UTC: 14-03-2017 06:16:32    System.out.println("Timestamp in UTC: " + df.format(current));

现在您可以看到

Timestamp
真正与
Instant
我们从头开始的想法一致(只有毫秒不打印,但我相信它们也在那里)。这样您就可以正确地完成所有操作,并且只会感到困惑,因为在打印时我们
Timestamp
隐式地调用了它的
toString
方法,而该方法又将获取计算机的时区设置并在该时区中显示时间。仅因为此,显示是不同的。

您尝试使用的另一件事

LocalDateTime
似乎起作用了,但实际上并没有提供您想要的东西:

    LocalDateTime ldt = LocalDateTime.ofInstant(Instant.now(), ZoneOffset.UTC);    System.out.println(ldt); // 2017-03-14T06:16:32.819    current = Timestamp.valueOf(ldt);    System.out.println(current); // 2017-03-14 06:16:32.819    System.out.println("Timestamp in UTC: " + df.format(current)); // 14-03-2017 04:16:32

现在,当我们

Timestamp
使用我们的UTC
打印时
DateFormat
,我们可以看到现在比格林尼治标准时间06:16:32早了2小时,
Instant
即04:16:32
UTC。因此,这种方法具有欺骗性,看起来像在起作用,但事实并非如此。

这显示了导致Java
8日期和时间类的设计替换旧的麻烦。因此,解决您的问题的真正有效的解决方案可能是让自己得到一个可以轻松接受

Instant
对象的JDBC
4.2驱动程序,从而避免
Timestamp
完全转换为一个对象。我不知道该功能是否适用于您,但我相信它会提供。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号