如何从"带时区的时间戳"列中读取时区?

Bar*_*cki 5 java postgresql jdbc timestamp-with-timezone

我无法找到一种方法来读取带时区的timestamp类型的PostgreSQL列中的时区值.

JDBC提供方法java.sql.ResultSet #getTimestamp(int,java.util.Calendar), 但我必须提供自己的日历.我看不到从我正在阅读的时间戳字段获取该日历.

我正在研究存储多个时区的时间数据的系统.我需要使用时区信息保存数据,并能够从数据库中读取该时区.

是不是没有黑客这样的可能

  • 将时区值存储在另一个字段中
  • 将日期存储为字符串,例如'Wed 17 Dec 07:37:16 1997 PST'

我正在使用JDBC 41(JDBC4 Postgresql驱动程序,版本9.4-1201),java 8.

Gor*_*son 7

这里的PostgreSQL文档说:

因为timestamp with time zone,内部存储的值始终为UTC(通用协调时间,传统上称为格林威治标准时间,GMT).

因此,不需要"存储时间[对应于时间戳值]" 本身 ; 该timestamp with time zone值总是存储为UTC.

此外,无需"从时间戳字段获取日历".日历的目的是让你定义一个特定的时区,你想在你的Java应用程序的工作.

换句话说,timestamp with timezone不存储来自各个时区的值(例如,一些在EST中,其他在PST中等),它在插入时间戳值时将所有内容转换为UTC.