我正在尝试使用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);
答案 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。具体而言是z
和Z
格式。