2017-09-22 235 views
0

我有一個Java客戶端,它以MySQL格式在UTC數據庫中插入(通過CSV和'LOAD DATA INFILE')時間戳(鍵入TIMESTAMP)。我的服務器的時區是「America/New_York」,我需要保留夏令時信息。 11月5日凌晨2點,時間從美國東部時間變爲東部時間,時鐘從早上1點恢復到凌晨1點。例如,11月5日上午1:30,發生兩次;一次在美國東部時間,一次在東部時將UTC時間戳插入到MySQL中 - 夏令時時區

如何讓服務器區分兩者?例如,如果我想插入'2017-11-05 01:30:00'EDT,有沒有辦法告訴MySQL告訴'2017-11-05 01:30:00'EDT(在時間變化)和'2017-11-05 01:30:00'美國東部標準時間(時間變化後)當我插入值?如果有問題,我的Java應用程序具有兩個時間戳的時區信息。

我想保持服務器的全球時區爲'America/New_York',因爲用戶訪問這些數據並希望它們顯示在當地時間。

我想到的解決方案是從Java客戶端將連接的時區設置爲UTC,將值插入UTC,然後重新設置連接的時區,但我想知道是否有更好,更「標準」解。

+0

如果該值是在UTC,沒有DST歧義。 '2017-11-05T01:30 EDT'與'2017-11-05T05:30 UTC'相同,'2017-11-05T01:30:00 EST'爲'2017-11-05T06:30 UTC'。 – 2017-09-22 17:41:38

+0

我知道。我的問題是,我在Java中有2個時間戳。一個是'2017-11-05 01:30:00'EDT,另一個是'2017-11-05 01:30:00'EST。我如何在TIMESTAMP類型的MySQL字段中插入這兩個字段,即UTC?我需要先將它們轉換爲Java中的UTC,然後插入它們,還是有更好的方法? –

+0

當你說* timestamp *,你的意思是一個'java.sql.Timestamp'或其他類型? – 2017-09-22 17:50:10

回答

0
+0

儘管是一個很棒的API,Joda-Time處於維護模式,並正在被新的API取代。即使在[joda的網站](http://www.joda.org/joda-time)中,它表示:**「請注意,Joda-Time被認爲是一個大部分」完成「的項目,沒有計劃進行重大改進。使用Java SE 8,請遷移到java.time(JSR-310)。「** - 無論如何,OP告訴你正在使用'ZonedDateTime'(Java 8),所以真的沒有理由使用Joda-Time。 – 2017-09-22 19:29:27