java.sql.Timestamp ZoneOffset 与 java.time 不匹配
java.sql.Timestamp ZoneOffset mismatch with java.time
Instant inst = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
--> 2015-10-19T00:00:00Z
Timestamp.from(inst)
--> 2015-10-19 11:00:00.0
为什么 java.sql.Timestamp 在转换后添加我的本地时区 (+11)?
好的,如果我们接受您的代码...
Instant inst = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
Timestamp ts = Timestamp.from(inst);
System.out.println(inst);
System.out.println(ts);
打印...
2015-10-19T00:00:00Z
2015-10-19 11:00:00.0
诚然,这可能出乎意料,但如果我们添加...
System.out.println(inst.toEpochMilli());
System.out.println(ts.getTime());
输出
1445212800000
1445212800000
您可以看到这两个值实际上是同一件事,但是 Timestamp
在打印时应用了本地时区
现在,如果相反,我们做类似...
Instant inst = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant();
Timestamp ts = Timestamp.from(inst);
System.out.println(inst);
System.out.println(ts);
System.out.println(inst.toEpochMilli());
System.out.println(ts.getTime());
使用系统的时区,打印
2015-10-18T13:00:00Z
2015-10-19 00:00:00.0
1445173200000
1445173200000
那么,问题就变成了,哪个对你来说更重要?就个人而言,我认为你所拥有的更重要
Instant inst = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
--> 2015-10-19T00:00:00Z
Timestamp.from(inst)
--> 2015-10-19 11:00:00.0
为什么 java.sql.Timestamp 在转换后添加我的本地时区 (+11)?
好的,如果我们接受您的代码...
Instant inst = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC);
Timestamp ts = Timestamp.from(inst);
System.out.println(inst);
System.out.println(ts);
打印...
2015-10-19T00:00:00Z
2015-10-19 11:00:00.0
诚然,这可能出乎意料,但如果我们添加...
System.out.println(inst.toEpochMilli());
System.out.println(ts.getTime());
输出
1445212800000
1445212800000
您可以看到这两个值实际上是同一件事,但是 Timestamp
在打印时应用了本地时区
现在,如果相反,我们做类似...
Instant inst = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant();
Timestamp ts = Timestamp.from(inst);
System.out.println(inst);
System.out.println(ts);
System.out.println(inst.toEpochMilli());
System.out.println(ts.getTime());
使用系统的时区,打印
2015-10-18T13:00:00Z
2015-10-19 00:00:00.0
1445173200000
1445173200000
那么,问题就变成了,哪个对你来说更重要?就个人而言,我认为你所拥有的更重要