0

SimpleDateFormatを使用してUNIXタイムスタンプとカスタムフォーマットの間で変換しようとしています。その逆も同様です。この逆の変換をテストするために、私は次のテストケースを作成しました。

public class Testception extends TestCase {
    public void testTheTestOrTestception() throws ParseException {
        Date datum = new Date(649555200000L);
        SimpleDateFormat dfm = new SimpleDateFormat("yyyy-MM-dd");
        TimeZone tZ = TimeZone.getTimeZone("Europe/Berlin");
        dfm.setTimeZone(tZ);
        String aDifferentFormat = dfm.format(datum);
        assertEquals("1990-08-02", aDifferentFormat);
        Date datum2 = dfm.parse(aDifferentFormat);
        assertEquals(649555200000L, datum2.getTime());
    }
}

unixtimestamp(649555200000)から始めて、カスタム形式( "1990-08-02")に変換します。これは、うまく機能しています。しかし、残念ながら2番目のアサートは失敗し、予想される649555200000Lの代わりに、結果は649548000000Lになります。

前もって感謝します。

乾杯L0rdAli3n

4

2 に答える 2

6

それはすべてタイムゾーンに関係しています。

UTCの真夜中を指定し、それを日付としてフォーマットしましたが、実際にはベルリン時間の午前2時でした。

次に、その日付を解析します。これは、開始点より2時間早いベルリンでその日付の深夜まで解析されます。真夜中のUTCを再度取得する場合は、のタイムゾーンをSimpleDateFormatUTCタイムゾーンに設定するだけです。

于 2012-05-08T19:35:21.993 に答える
1

コードには何も問題はなく、入力の仮定だけです。

649555200000Lは、1990年8月2日のベルリンの午前2時です。実際の結果は、ベルリンの真夜中の正しい値です。これは、日付のみの文字列パターンをjava.util.Dateに解析するときにjavaが提供する値です。

于 2012-05-08T19:37:02.863 に答える