gpt4 book ai didi

java - 使用 postgres 的时区将日期转换为时间戳

转载 作者:行者123 更新时间:2023-12-01 10:34:18 27 4
gpt4 key购买 nike

我有类型为 TIMESTAMP WITH TIME ZONE 的 postgresql 时间列,其示例值类似于 1970-01-01 00:00:00+05:30 我想要比较一个值Date 值如下:

Date date = new Date(0L);

即1 月 19 日星期二 13:55:24 IST 2016

所以我用了

Timestamp timeStampDate = new Timestamp(date.getTime());

上面的代码将 timeStampDate.getTime() 指定为 0。

如何将其转换为上述格式以便进行比较,目前比较没有结果。如何设置此日期的格式。

我基本上想将“Date is Thu Jan 01 05:30:00 IST 1970 ”转换为以下格式:“1970-01-01 00:00:00+05:30”

最佳答案

java.time

如果您的数据库驱动程序支持 JDBC 4.2 或更高版本,请使用 Instant 从数据库中获取存储在 TIMESTAMP WITH TIME ZONE 列中的数据。

Instant instant = myResultSet.getObject( … , Instant.class ) ;

对于较旧的 JDBC 驱动程序,请使用 java.sql.Timestamp通过在 ResultSet 上调用 getTimestamp 从数据库获取数据。该时间戳对象采用 UTC。顺便说一句,Postgres 以 UTC 形式存储您的TIMESTAMP WITH TIME ZONE,并且在使用该数据调整为 UTC 后,会丢失传入数据附带的原始时区或相对于 UTC 的偏移量。存储过程。

您应该尽快将 java.sql.Timestamp/.Date/.Time 转换为 java.time 类型。然后继续您的业务逻辑。

简而言之,java.time 是……Instant 是 UTC 时间轴上的一个时刻。应用时区 (ZoneId) 来获取 ZonedDateTime

转换为java.time

因此,从时间戳进行转换,获取 Instant,应用 ZoneId。

java.sql.Timestamp ts = myResultSet.getTimestamp( 1 );

Instant instant = ts.toInstant();

指定您想要/预期的时区。适用于即时。

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

比较

获取当前时刻,用于比较。

ZonedDateTime now = ZonedDateTime.now( zoneId );

通过调用 isEqualisBeforeisAfter 方法进行比较。

Boolean beforeNow = zdt.isBefore( now );
<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于java - 使用 postgres 的时区将日期转换为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34871801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com