2015-10-19 62 views
3

​​- >2015-10-19T00:00:00Z的java.sql.Timestamp ZoneOffset错配java.time

Timestamp.from(inst) - >2015-10-19 11:00:00.0

为什么java.sql.Timestamp中的转换后加入我的本地时区(+11)?

+0

我会假设它是关于时区。 UTC的本地偏移量是多少? –

+1

如果您同时转储'inst'和'Timestamp'毫秒值,两者都是相同的,'1445212800000',最有可能的'Timestamp'在本地时区呈现值 – MadProgrammer

+0

嗨,我的本地时区是+11但我需要知道如何正确的方式来获取LocalDate.now()。atStartOfDay().InInstant(ZoneOffset.UTC)的java.sql.Timestamp –

回答

2

好吧,如果我们把你的代码...

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 

这admittly可能是意想不到的,但如果我们增加......

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 

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

+0

好吧...所以这是一个字符串转换的问题是什么导致我下一个问题......谢谢@madprogrammer –