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