java.sql.Timestamp区域偏移与java.time不匹配

java.sql.Timestamp区域偏移与java.time不匹配,java,timestamp,java-8,java-time,timestamp-with-timezone,Java,Timestamp,Java 8,Java Time,Timestamp With Timezone,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(Zo

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
您可以看到这两个值实际上是相同的,但是打印时,
时间戳
应用了本地时区

现在,如果相反,我们做一些像

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

那么,问题就变成了,哪一个对你更重要?就我个人而言,我认为你所拥有的更重要

我认为这是关于时区的。您与UTC的本地偏移量是多少?如果您同时转储
inst
Timestamp
毫秒值,则这两个值都相同,
1445212800000
,很可能
Timestamp
正在本地时区HI中显示该值,我的本地时区是+11,但我需要知道如何正确获取LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)“嗨,我的本地时区是+11,但我需要知道如何正确获取LocalDate.now()的java.sql.Timestamp().atStartOfDay().toInstant(ZoneOffset.UTC)”-您已经有OK。。。因此,这是一个字符串转换的问题,什么导致我的下一个问题。。。谢谢@madprogrammer