从unix时间获取当前时区的小时

时间:2015-06-25 02:03:07

标签: java android unix calendar timezone

我正在尝试使用GMT unix时间为用户的时区检索转换后的“小时”整数。我的代码在某些时候有效,但是例如,在东海岸是晚上9点,小时为0。有人可以帮忙吗?

long l = Long.parseLong(oslist.get(position).get("hour"));

                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(l);
                calendar.setTimeInMillis(l * 1000);
                calendar.setTimeZone(TimeZone.getDefault());

                int hour = calendar.get(Calendar.HOUR);
                Log.v("TIME:", ""+hour);

3 个答案:

答案 0 :(得分:2)

您不需要设置时区 - 默认情况下它是默认设置。并且两次调用setTimeInMillis毫无意义。所以只是:

Calendar calendar = calendar.getInstance();
calendar.setTimeInMillis(unixTimestamp * 1000L);
int hour = calendar.get(Calendar.HOUR);

......应该绝对没问题。如果不是,那么通过其他答案建议的字符串表示进行帮助就不会有用。

如果它在东海岸的晚上9点给出0,则表明默认时区不是代表东海岸的时区。我建议你先诊断出来:

System.out.println(TimeZone.getDefault().getID());
// Just in case the ID is misleading, what's the standard offset for this zone?
System.out.println(TimeZone.getDefault().getRawOffset());

答案 1 :(得分:-1)

试试这个:

long l = Long.parseLong(oslist.get(position).get("hour"));

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(l);
    calendar.setTimeInMillis(l * 1000);
    Date date = calendar.getTime(); //current date and time in UTC
    SimpleDateFormat df = new SimpleDateFormat("HH"); //HH = 0-23 hours
    df.setTimeZone(TimeZone.getDefault()); //format in given timezone

    String hourStringValue = df.format(date);
    int hourIntValue = Integer.parseInt(hourStringValue);

答案 2 :(得分:-1)

此外,如果您需要时区,请参阅Class SimpleDateFormat。具体而言是zZ格式。