5

我正在使用以下代码尝试获取 unix 时间戳的 HOUR_OF_DAY (0-23),转换为毫秒。时间戳“1296442971”转换为 Sun Jan 30 2011 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);

在此示例中,“小时”和“十二小时”的值都为 10,而“小时”的值应为“22”。有人对我的代码有什么问题有任何想法吗?

谢谢!

4

4 回答 4

7

假设ts是包含值1296442971的变量。我相信你没有声明它是long类型,因此它可能会溢出

将ts更改为 long 类型后,以下工作

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

您的问题几乎可以肯定是您使用 anint来保持秒数。输入以下检查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

这分别为我打印 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
于 2016-09-16T23:47:16.247 回答