UTC-string to java.sql.Timestamp
yyyy-MM-dd’T’HH:mm:ss.SSSSSS’Z’
T Z 代表了即UTC时间
.SSSSSSSSS 即保留到小数点后9位的精度,也是 java.sql.Timestamp 最大精度。
举例 2019-11-11T03:11:11.233333333Z 我们如何保留精度得到 java.sql.Timestamp 对象呢?
java8 OffsetDateTime
既然 2019-11-11T03:11:11.233333333Z 是字符串,我们自然想到就是把它 parse 成 java 的时间对象,经过查阅资料,发现 OffsetDateTime (表示一个带 ZoneOffset 的时间)正好符合要求。
直接上干货:
import java.sql.Timestamp;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author cuishilei
*/
public class DateTimeTest {
public static void main(String[] args) {
String timeStampUtcStr = "2019-11-11T03:11:11.233333333Z";
//这里我根据方法参数直接找到了 DateTimeFormatter.ISO_OFFSET_DATE_TIME 这个代表 UTC 时间格式的 Formatter
OffsetDateTime offsetDateTime = OffsetDateTime.parse(timeStampUtcStr, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
// toInstant 返回 Instant 对象,表示是某个时间(有点像 java.util.Date),它是精确到纳秒的,正好符合 Timestamp 的精度
// 其内部是由两个Long字段组成,
// 第一个部分保存的是自标准Java计算时代(就是1970年1月1日开始)到现在的秒数,这里自然就解决了时区问题
// 第二部分保存的是纳秒数(永远不会超过999,999,999)
Instant instant = offsetDateTime.toInstant();
// 并且 Timestamp 可以根据 Instant 直接生成 Timestamp 对象,
Timestamp timestamp = Timestamp.from(instant);
System.out.println(timeStampUtcStr);
System.out.println(timestamp);
}
}
输出结果
2019-11-11T03:11:11.233333333Z
2019-11-11 11:11:11.233333333
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rockeycui@163.com
文章标题:UTC-string to java.sql.Timestamp
文章字数:357
本文作者:崔石磊(RockeyCui)
发布时间:2019-10-12, 20:21:33
原始链接:https://cuishilei.com/utc-str-to-timestamp.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。