从UNIX纪元时间创建日历时日期不正确(1970年的某个时候)?

Maj*_*imi 2 java datetime

我有一个表存储unix时间和等效时间戳的表.

CREATE TABLE tbl_time
(
    time_unix BIGINT,
    time_timestamp TIMESTAMP WITHOUT TIME ZONE
);
Run Code Online (Sandbox Code Playgroud)

数据库在PostgreSQL中.数据库已配置Asia/Tehran时区.例如:

1333436817, 2012-04-03 11:36:57
Run Code Online (Sandbox Code Playgroud)

当我将unix时间转换为python中的字符串格式时:

datetime.datetime.fromtimestamp(1333436817)
Run Code Online (Sandbox Code Playgroud)

它给了我: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());
Run Code Online (Sandbox Code Playgroud)

它给出:Sat Jan 24 06:12:35 IRST 1970.系统本身在Asia/Tehran时区下运行.我在Debian 6.0.5上使用PostgreSQL 8.4.11与python 3.1和openjdk 6.任何人都可以帮忙吗?

tib*_*ibo 6

1333436817*1000的结果对于整数而言太大,因此它会溢出.在这种情况下,Java不会自动为您提升类型.

试试看:

    c.setTimeInMillis(1333436817 * 1000L);
Run Code Online (Sandbox Code Playgroud)

请注意L,强制您的计算使用长整数.