3

日付に変換したいタイムスタンプがあります。このタイムスタンプを試してみました: 1336425840。これは、2012 年 5 月 7 日月曜日 21:24:00 GMT である必要があります。ここで、GMT はエミュレーターに設定するタイムゾーンです。私はこれを試しました:

final Calendar c = Calendar.getInstance();
c.setTimeInMillis(1336425840*1000);
Date d = c.getTime();
Log.i("MyTag", "Hours: " + d.getHours());

結果は次のとおりです。時間: 23。

したがって、返される日付は、システムに設定されているタイムゾーンである GMT+2 に従って計算されるようです。エミュレーターのタイムゾーンが GMT に設定されているように見えるため、g.hetHours() が 21 を返すことを期待していました。

また、そのタイムスタンプは、mktime を使用して C で実際の日付を読み取った結果であり、正しいタイムスタンプを返すようです。しかし、Java は別のタイムゾーンを参照しているようです。私は何か間違ったことをしていますか?Mon, 07 May 2012 21:24:00 GMT が返されないのはなぜですか?

4

2 に答える 2

5

1336425840*1000の通常の範囲外の値が得られると確信していますint。実際、Calendarオブジェクトの完全な日付を印刷すると、 が表示され、表示さThu Jan 08 23:56:50 GMT 1970れる時間が説明され23ます。

乗算を次のように変更します: (L末尾の に注意してください)

c.setTimeInMillis(1336425840 * 1000L);

// 編集: 簡単に確認:

System.out.println((1336425840 * 1000L > Integer.MAX_VALUE));

:)

于 2012-05-10T07:53:22.227 に答える
2

オブジェクトを使用してDateFormatから、 でタイム ゾーンを設定する必要がありますsetTimeZone()

于 2012-05-10T07:12:10.230 に答える