第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

時間戳時區(qū)是特定的嗎?

時間戳時區(qū)是特定的嗎?

胡說叔叔 2019-07-01 09:57:17
時間戳時區(qū)是特定的嗎?我必須將UTC dateTime存儲在DB中。我已經(jīng)將特定時區(qū)中給定的日期時間轉(zhuǎn)換為UTC。為此,我遵循了以下代碼。我的輸入日期是“20121225 10:00 Z”時區(qū)是“亞洲/加爾各答”MyServer/DB(Oracle)運行在同一時區(qū)(IST)“Asia/Calcutta”在這個特定的時區(qū)中獲取日期對象        String date = "20121225 10:00:00 Z";         String timeZoneId = "Asia/Calcutta";         TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);         DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");                     //This date object is given time and given timezone         java.util.Date parsedDate = dateFormatLocal.parse(date + " "                            + timeZone.getDisplayName(false, TimeZone.SHORT));         if (timeZone.inDaylightTime(parsedDate)) {             // We need to re-parse because we don't know if the date             // is DST until it is parsed...             parsedDate = dateFormatLocal.parse(date + " "                     + timeZone.getDisplayName(true, TimeZone.SHORT));         }        //assigning to the java.sql.TimeStamp instace variable         obj.setTsSchedStartTime(new java.sql.Timestamp(parsedDate.getTime()));存儲到DB中        if (tsSchedStartTime != null) {             stmt.setTimestamp(11, tsSchedStartTime);         } else {             stmt.setNull(11, java.sql.Types.DATE);         }輸出量DB(Oracle)存儲了相同的給定dateTime: "20121225 10:00:00不是在世界協(xié)調(diào)時。我已經(jīng)從下面的SQL中確認了這一點。     select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable我的DB服務(wù)器也運行在同一時區(qū)“Asia/Calcutta”上。它給了我以下的表象Date.getTime()不在世界協(xié)調(diào)時或者時間戳在存儲到DB時有時區(qū)影響,我在這里做錯了什么?還有一個問題:將要timeStamp.toString()在本地時區(qū)打印,如java.util.date有嗎?不是UTC?
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

雖然沒有顯式地為setTimestamp(int parameterIndex, Timestamp x)司機必須遵守setTimestamp(int parameterIndex, Timestamp x, Calendar cal)javadoc:

將指定的參數(shù)設(shè)置為java.sql.Timestamp值,使用給定的Calendar對象。驅(qū)動程序使用Calendar對象來構(gòu)造sql。TIMESTAMP值,然后驅(qū)動程序?qū)⑵浒l(fā)送到數(shù)據(jù)庫。帶著Calendar對象時,驅(qū)動程序可以在考慮自定義時區(qū)的情況下計算時間戳。如果沒有Calendar對象時,驅(qū)動程序使用默認時區(qū),即運行應(yīng)用程序的虛擬機的時區(qū)。

當你打電話給setTimestamp(int parameterIndex, Timestamp x)JDBC驅(qū)動程序使用虛擬機的時區(qū)計算該時區(qū)中時間戳的日期和時間。這個日期和時間是存儲在數(shù)據(jù)庫中的內(nèi)容,如果數(shù)據(jù)庫列沒有存儲時區(qū)信息,那么有關(guān)該區(qū)域的任何信息都會丟失(這意味著由應(yīng)用程序使用數(shù)據(jù)庫一致地使用相同的時區(qū),或者想出另一種方案來識別時區(qū)(即存儲在單獨的列中)。

例如:您的本地時區(qū)是格林尼治標準時間+2,存儲“2012-12-25 10:00:00協(xié)調(diào)世界時”。存儲在數(shù)據(jù)庫中的實際值是“2012-12-25 12:00:00”。您再次檢索它:以“2012-12-25 10:00:00協(xié)調(diào)世界時”的形式再次取回它(但前提是您必須使用getTimestamp(..)),但是當另一個應(yīng)用程序訪問時區(qū)GMT+0中的數(shù)據(jù)庫時,它將檢索時間戳為“2012-12-2512:00 UTC”。

如果要將其存儲在不同的時區(qū),則需要使用setTimestamp(int parameterIndex, Timestamp x, Calendar cal)使用所需時區(qū)中的Calendar實例。只需確保在檢索值時也使用具有相同時區(qū)的等效getter(如果使用TIMESTAMP在數(shù)據(jù)庫中沒有時區(qū)信息)。

因此,假設(shè)您想要存儲實際的GMT時區(qū),則需要使用:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));stmt.setTimestamp(11, tsSchedStartTime, cal);

使用JDBC4.2,兼容的驅(qū)動程序應(yīng)該支持java.time.LocalDateTime(和java.time.LocalTime)TIMESTAMP(和TIME)通過get/set/updateObject..這個java.time.Local*類沒有時區(qū),因此不需要應(yīng)用轉(zhuǎn)換(盡管如果代碼確實假定了特定的時區(qū),這可能會打開一組新的問題)。


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關(guān)注
  • 1663 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號