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

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

對于給定的 Date 對象,捕獲其與 GMT 時區(qū)相關(guān)的值

對于給定的 Date 對象,捕獲其與 GMT 時區(qū)相關(guān)的值

慕桂英546537 2023-07-13 15:49:45
在 Java 8 上運行的應(yīng)用程序中,我有一個 Date 對象。該對象的時區(qū)取決于客戶端的位置。在某一特定時刻,我需要將此日期轉(zhuǎn)換為 GMT,以便它可以與我從數(shù)據(jù)庫訪問的值進行比較。我嘗試了 SimpleDateFormat 和 ZonedDateTime,但有一個痛點。這些 API 為我提供了字符串值形式的 GMT 時間,這非常好。但是,一旦我解析它并將其分配給 Date 對象,它就會回到我的本地時區(qū)!例如:public class TimeZoneDemo {    public static void main(String[] args) throws ParseException {        Date istDate = Calendar.getInstance().getTime();        ZonedDateTime gmtTime = istDate.toInstant().atZone(ZoneId.of("GMT"));        System.out.println(gmtTime);        Date gmtDate = Date.from(gmtTime.toInstant());        System.out.println(gmtDate);    }}在上面的代碼中,gmtTime顯示與 GMT 時區(qū)相關(guān)的正確值,但gmtDate(Date 對象)打印本地時區(qū)的值。PS:我的最終目標是在 java.sql.TimeStamp 對象中擁有 GMT 值。如何才能實現(xiàn)這一目標?更新 1: 查看評論和回復(fù)后,我了解到 Date 對象只保存一個包含毫秒的長值。 但是,我的期望是,當執(zhí)行此行時:Date gmtDate = Date.from(gmtTime.toInstant());無論對象gmtTime包含什么時間,我都需要在 TimeStamp 或 Date 對象中捕獲該時間。動機是能夠與數(shù)據(jù)庫中保存的值進行比較。我將日期作為參數(shù)傳遞給我的 SQL 查詢。有人可以幫我理解如何實現(xiàn)這一點嗎?
查看完整描述

3 回答

?
MMMHUHU

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

java.time 和 JDBC 4.2

使用OffsetDateTime。


? ? PreparedStatement yourPreparedStatement = yourDatabaseConnection.prepareStatement(

? ? ? ? ? ? "select smth from your_table where your_time_stamp_col < ?;");

? ? OffsetDateTime gmtTime = OffsetDateTime.now(ZoneOffset.UTC);

? ? yourPreparedStatement.setObject(1, gmtTime);

這需要一個兼容 JDBC 4.2 的 JDBC 驅(qū)動程序,我認為現(xiàn)在我們所有人都在使用它。這很好,因為它允許我們繞過java.sql.Timestamp中的其他日期時間類型java.sql。它們的設(shè)計都很糟糕并且早已過時。


正如其他人所說,這兩個類都不是過時的Date,也Timestamp沒有任何時區(qū)或與 UTC/GMT 的偏移。


查看完整回答
反對 回復(fù) 2023-07-13
?
長風(fēng)秋雁

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

首先,Date類是舊的過時的(沒有雙關(guān)語)基礎(chǔ)設(shè)施的一部分。如果可能的話,擺脫它并只使用java.time包。但如果您必須使用,Date那么您的時區(qū)問題就不是問題。您的線路System.out.println(gmtDate);僅使用您的本地時區(qū)打印它,因為系統(tǒng)假定它是最佳選擇。但無論如何,Date自 1970 年 1 月 1 日 00:00:00 GMT 以來的特定時刻(以毫秒為單位)。類具有compareTo()、after()和before()Date方法,可讓您比較2 個日期。還有方法getTime()Date返回此日期表示的自 1970 年 1 月 1 日 00:00:00 GMT 以來的毫秒數(shù)。這樣您就可以比較這些long值。但同樣,最好的選擇是切換到java.time包和類Instant和ZonedDateTime(和其他)有方法compareTo()、isAfter() 和 isBefore()。



查看完整回答
反對 回復(fù) 2023-07-13
?
收到一只叮咚

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

您誤解了日期時間類的語義。java.util.Date是一個特定的時間點,一個瞬間,它沒有與之關(guān)聯(lián)的時區(qū)。但是,如果您有時區(qū),您可以詢問時區(qū)的時間java.util.Date。

java.sql.TimeStamp相當于java.time.LocalDateTime. 它不是一個瞬間,也沒有與之關(guān)聯(lián)的時區(qū)。


查看完整回答
反對 回復(fù) 2023-07-13
  • 3 回答
  • 0 關(guān)注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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