3 回答

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 的偏移。

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()。

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ū)。
添加回答
舉報