我有一个表,它存储Unix时间和等效时间戳。
CREATE TABLE tbl_time
(
time_unix BIGINT,
time_timestamp TIMESTAMP WITHOUT TIME ZONE
);
该数据库位于PostgreSQL中。数据库已配置为
Asia/Tehran
时区。例如:
1333436817, 2012-04-03 11:36:57
当我使用以下命令将Unix时间转换为python中的字符串格式时:
datetime.datetime.fromtimestamp(1333436817)
它给了我:
datetime.datetime(2012, 4, 3, 11, 36, 57)
这是正确的,等于数据库。但是当我使用以下方式使用java进行此转换时:Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tehran"));
c.setTimeInMillis(1333436817 * 1000);
System.out.println(c.getTime());
它给出:
Sat Jan 24 06:12:35 IRST 1970
。系统本身在Asia/Tehran
时区下运行。我在Debian 6.0.5上使用PostgreSQL 3.1和openjdk 6的PostgreSQL 8.4.11。有人可以帮忙吗? 最佳答案
1333436817 * 1000的结果对于整数而言太大,因此会溢出。在这种情况下,Java不会自动为您升级类型。
试试看:
c.setTimeInMillis(1333436817 * 1000L);
注意,
L
强制您的计算使用长整数。