0

我正在使用以下代码在 java 中生成 unix 时间戳。

 Date d1=new Date();
    System.out.println(new Timestamp(d1.getTime()));
    System.out.println(d1.getTime());

这会给我一个输出为 1382016125183 (日期为 2013-10-17 18:52:05.183)

现在我想要在 informix 中完全相同的时间戳,所以我使用以下存储过程来生成时间戳:

CREATE PROCEDURE to_unix_time(d DATETIME YEAR TO FRACTION(5)
                                DEFAULT CURRENT YEAR TO FRACTION(5))
            RETURNING DECIMAL(18,5);
    DEFINE n DECIMAL(18,5);
    DEFINE i1 INTERVAL DAY(9) TO DAY;
    DEFINE i2 INTERVAL SECOND(6) TO FRACTION(5);
    DEFINE s1 CHAR(15);
    DEFINE s2 CHAR(15);
    LET i1 = EXTEND(d, YEAR TO DAY) - DATETIME(1970-01-01) YEAR TO DAY;
    LET s1 = i1;
    LET i2 = EXTEND(d, HOUR TO FRACTION(5)) -
                DATETIME(00:00:00.00000) HOUR TO FRACTION(5);
    LET s2 = i2;
    LET n = s1 * (24 * 60 * 60 * 1000) + s2;
    RETURN n;
END PROCEDURE;

我在此过程中输入的日期与在 java 中输入的日期相同。但它会为日期 2013-10-17 18:52:05.183 生成错误的时间戳 1381968067925。

我希望两个时间戳在这两种情况下都相等 - 我该怎么做?

4

1 回答 1

0

这两个结果之间的差异为 48057258。将其除以 60/60/1000,看起来差异约为 13 小时。这可能是时区的问题吗?您的一个例程是使用 UTC 而另一个是本地 TZ 吗?

于 2013-10-18T01:04:44.060 回答