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

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

Java.util.date 獲取客戶端時(shí)區(qū)的實(shí)際日期

Java.util.date 獲取客戶端時(shí)區(qū)的實(shí)際日期

猛跑小豬 2022-08-03 15:21:44
上下搜索,向右和向左 - 找不到這個問題的簡單答案:我有java.util.Date實(shí)例,它從mySQL獲取其值。此外,我有登錄用戶的時(shí)區(qū)代碼。我需要獲取用戶時(shí)區(qū)的實(shí)際時(shí)間。例如:我的服務(wù)器計(jì)算機(jī)時(shí)區(qū)是 GMT+2。我在 DB 中的日期值為: 2017-02-09 16:38:58.000根據(jù)我的服務(wù)器- 機(jī)器 - 時(shí)區(qū),我將其放入日期實(shí)例為:2017-02-09T16:38:58.000 + 0200現(xiàn)在我需要知道如果:例如,我的客戶端時(shí)區(qū)代碼是GMT + 4,我想得到:2017-02-09 20:38:58.000純?nèi)掌?,這與我的時(shí)區(qū)正好,不包含“+4”或“GMT”指示。簡而言之:將我的java.util.date轉(zhuǎn)換為純?nèi)掌冢撊掌谟袡?quán)轉(zhuǎn)換為特定時(shí)區(qū)。聽起來很簡單?在閱讀了非常多的文獻(xiàn)之后,我已經(jīng)不確定這是否非常簡單。
查看完整描述

2 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個贊

時(shí)間戳(帶時(shí)區(qū))

據(jù)我所知,數(shù)據(jù)庫中的日期時(shí)間以UTC為單位,但是當(dāng)您檢索它時(shí),您(錯誤地)收到2017-02-09T16:38:58.000 + 02:00。


首先,如果可以的話,將MySQL數(shù)據(jù)庫列的數(shù)據(jù)類型更改為(在其他一些數(shù)據(jù)庫中,它將被稱為 )。這將確保MySQL知道時(shí)間是UTC,并且應(yīng)該使您能夠?qū)⑺鼈儥z索為正確的時(shí)間點(diǎn),而不是在錯誤的時(shí)區(qū)中檢索正確的時(shí)間。這反過來又將為您提供轉(zhuǎn)換為客戶端時(shí)區(qū)的最佳起點(diǎn)。timestamptimestamp with time zone


java.time

其次,從 java.time(現(xiàn)代 Java 日期和時(shí)間 API)中檢索您的值到適當(dāng)?shù)念愋椭?。避免,因?yàn)樗O(shè)計(jì)不佳,無法處理不同的時(shí)區(qū)。例如,如果數(shù)據(jù)庫數(shù)據(jù)類型為 :java.util.Datedatetime


    LocalDateTime dateTime = yourResultSet.getObject("your_col", LocalDateTime.class);

LocalDateTime是一天中沒有時(shí)區(qū)的日期和時(shí)間,因此您不能獲得錯誤的時(shí)區(qū)。提供您知道正確的偏移量:


    OffsetDateTime odt = dateTime.atOffset(ZoneOffset.UTC);

轉(zhuǎn)換為客戶端時(shí)區(qū):


    ZoneId clientTimeZone = ZoneId.of("Indian/Reunion");

    ZonedDateTime clientDateTime = odt.atZoneSameInstant(clientTimeZone);


    System.out.println(clientDateTime);

2017-02-09T20:38:58+04:00[印度/留尼汪]


在區(qū)域/城市格式中使用實(shí)時(shí)時(shí)區(qū),而不是像 .它更容易理解,更面向未來。印度/留尼汪島只是一個例子,當(dāng)然,為您的客戶使用正確的一個。+04:00


上面有偏移量和時(shí)區(qū)。建議保持這種方式,我不認(rèn)為它有任何危害??蛻舳耸冀K可以選擇不顯示它。如果您仍然堅(jiān)持,請?jiān)俅无D(zhuǎn)換為:ZonedDateTimeLocalDateTime


    LocalDateTime clientDateTimeWithoutOffset = clientDateTime.toLocalDateTime();

    System.out.println(clientDateTimeWithoutOffset);

2017-02-09T10:38:58


如果數(shù)據(jù)庫數(shù)據(jù)類型為時(shí)間戳:


    OffsetDateTime odt = yourResultSet.getObject("your_col", OffsetDateTime.class);

這樣就節(jié)省了上面的第一步。其余的是相同的。


查看完整回答
反對 回復(fù) 2022-08-03
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個贊

java.util.Date 不存儲任何時(shí)區(qū)。它只是存儲自“epoch”(即 1970 年 1 月 1 日 00:00:00 UTC)以來的毫秒數(shù)。


因此,您所要做的就是知道服務(wù)器計(jì)算機(jī)的時(shí)區(qū),找到此時(shí)區(qū)與要將其轉(zhuǎn)換為的時(shí)區(qū)之間的時(shí)間段,然后添加或減去該時(shí)間段。


更新:


int clientGMT = 4; //GMT you want to convert to

int serverGMT = 2; //server's GMT

int delta = clientGMT - serverGMT; //delta between the dates


//assume this is the date in GMT + 2 received from the server

Date d1 = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss").parse("12.03.2019 13:00:00");


//... and you want to convert it to GMT + 4 (client side's time zone)

Date resultDate = new Date(d1.getTime() + delta * 3600000);

附言是的,您必須手動操作時(shí)區(qū),正如我上面所說,不會存儲此信息(每個日期都假定為UTC)。java.util.Date


查看完整回答
反對 回復(fù) 2022-08-03
  • 2 回答
  • 0 關(guān)注
  • 178 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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