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

bttbmeg0  于 2023-09-28  发布在  Android
关注(0)|答案(4)|浏览(149)

我试图检索一个转换的“小时”整数为用户的时区与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);
irlmq6kh

irlmq6kh1#

您不需要设置时区-它是默认的,因为它是默认的。调用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());
hmtdttj4

hmtdttj42#

java.time

java.util日期时间API及其相应的解析/格式化类型SimpleDateFormat已经过时并且容易出错。2014年3月,modern Date-Time API取代了这个API。从那时起,强烈建议切换到现代日期时间API java.time

java.time API方案:

您可以使用Instant#ofEpochSecond来获取与给定Unix时间戳对应的Instant。接下来,将Instant转换为所需时区的ZonedDateTime,然后您可以获得单独的时间单位(例如#21040;出了这个ZonedDateTime

// e.g. a Unix timestamp representing 9:00pm on 10-Sep-2023 in New York
long epochSeconds = 1694394000L;
Instant instant = Instant.ofEpochSecond(epochSeconds);
ZonedDateTime zdt = instant.atZone(ZoneId.of("America/New_York"));
System.out.println(zdt);
System.out.println(zdt.getHour());

输出:

2023-09-10T21:00-04:00[America/New_York]
21

Online Demo
从**Trail: Date Time**了解有关现代日期-时间API的更多信息

disho6za

disho6za3#

另外,如果您需要时区本身,请参阅Class SimpleDateFormat。特别是zZ

czfnxgou

czfnxgou4#

试试这个:

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);

相关问题