3 回答
TA贡献1834条经验 获得超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 驱动程序,我认为现在我们所有人都在使用它。这很好,因为它允许我们绕过java.sql.Timestamp中的其他日期时间类型java.sql。它们的设计都很糟糕并且早已过时。
正如其他人所说,这两个类都不是过时的Date,也Timestamp没有任何时区或与 UTC/GMT 的偏移。
TA贡献1757条经验 获得超7个赞
首先,Date
类是旧的过时的(没有双关语)基础设施的一部分。如果可能的话,摆脱它并只使用java.time
包。但如果您必须使用,Date
那么您的时区问题就不是问题。您的线路System.out.println(gmtDate);
仅使用您的本地时区打印它,因为系统假定它是最佳选择。但无论如何,Date
自 1970 年 1 月 1 日 00:00:00 GMT 以来的特定时刻(以毫秒为单位)。类具有compareTo()、after()和before()Date
方法,可让您比较2 个日期。还有方法getTime()Date
返回此日期表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。这样您就可以比较这些long
值。但同样,最好的选择是切换到java.time
包和类Instant和ZonedDateTime(和其他)有方法compareTo()、isAfter() 和 isBefore()。
TA贡献1821条经验 获得超4个赞
您误解了日期时间类的语义。java.util.Date
是一个特定的时间点,一个瞬间,它没有与之关联的时区。但是,如果您有时区,您可以询问时区的时间java.util.Date
。
java.sql.TimeStamp
相当于java.time.LocalDateTime
. 它不是一个瞬间,也没有与之关联的时区。
添加回答
举报