5

次のコードを使用して、ミリ秒に変換されたUNIXタイムスタンプのHOUR_OF_DAY(0-23)を取得しようとしています。タイムスタンプ「1296442971」は、2011年1月30日22:02:51 GMT-0500(EST)に変換されます。

次のコードを実行して、24時間のタイムスタンプを取得しようとしています。

    //calculate the hour for this timestamp
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone(tz));             
    calendar.setTimeInMillis(ts * 1000);
    int hour = calendar.get(Calendar.HOUR_OF_DAY);  
    int twelveHour = calendar.get(Calendar.HOUR);

この例では、「hour」と「twelveHour」の両方の値が10ですが、「hour」の値は「22」である必要があります。私のコードで何が間違っている可能性があるかについて誰かが何か考えを持っていますか?

ありがとう!

4

4 に答える 4

7

tsが値1296442971を含む変数であると仮定します。あなたはそれが長いタイプであると宣言していないので、あふれているかもしれないと思います

以下は、tsをロングタイプに変更した後に機能します

long l = 1296442971;
calendar.setTimeInMillis(l * 1000);
out.println(calendar.getTime());
out.println(calendar.get(Calendar.HOUR_OF_DAY));
out.println(calendar.get(Calendar.HOUR));
于 2011-01-31T05:08:42.010 に答える
0

これは私にとってそれぞれ22と10を印刷します。それはニューヨークにとって正しいように見えます(あなたが東の時間について言及したので)。

    long ts = 1296442971;
    Calendar calendar = Calendar.getInstance();       
    TimeZone tz = TimeZone.getTimeZone("America/New_York");
    calendar.setTimeZone(tz);
    calendar.setTimeInMillis(ts*1000);
    int hour = calendar.get(Calendar.HOUR_OF_DAY);  
    int twelveHour = calendar.get(Calendar.HOUR);
    System.out.println("hour:"+hour);
    System.out.println("twelvehour:"+twelveHour);
于 2011-01-31T05:02:38.593 に答える
0

あなたの問題は、ほぼ確実にint、秒を保持するためにを使用していることです。次のプログラムを入力して、チェックintしてlong

import java.util.Calendar;
import java.util.TimeZone;

public class scratch {
    public static void main (String args[]) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));

        int intval = 1296442971;
        calendar.setTimeInMillis(intval * 1000);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);  
        int twelveHour = calendar.get(Calendar.HOUR);
        System.out.println (hour);
        System.out.println (twelveHour);

        long longval = 1296442971L;
        calendar.setTimeInMillis(longval * 1000);
        hour = calendar.get(Calendar.HOUR_OF_DAY);  
        twelveHour = calendar.get(Calendar.HOUR);
        System.out.println (hour);
        System.out.println (twelveHour);
    }
}

そしてあなたは得る:

10
10
22
10
于 2011-01-31T05:08:30.993 に答える
0
于 2016-09-16T23:47:16.247 に答える