2015-10-19 63 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 –