我有一个表,它存储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强制您的计算使用长整数。

09-12 14:34