我正在尝试获取时间戳的时间,但是当我使用Calendar.HOUR
和Calendar.MINUTE
时,我一直在错误的时间,无论时间戳是什么,它告诉我小时为10,分钟是12。
现在当我使用Calendar.getTime()
时,它给了我正确的时间,所以我不明白?我只想以12小时格式和分钟获得小时
这是我如何去做的
public static String getRealTime(long time){
Calendar cal = Calendar.getInstance();
Log.d("Calendar",String.valueOf(time));
cal.setTimeInMillis(time);
Date timeS = cal.getTime();
String sTime = timeS.toString(); // gives correct time in 24hr format
int hr = cal.HOUR; // gives me 10 no matter what the timestamp is
int min = cal.MINUTE; // gives me 12 no matter what the timestamp is
String dMin = getDoubleDigit(min);
int ampm = cal.AM_PM;
String m = new String();
if(ampm == 0){
m = "AM";
}else{
m="PM";
}
String rtime = String.valueOf(hr)+":"+dMin+" "+m;
return rtime;
}
所以说时间戳是1316626200000
cal.getTime()给我Wed Sep 21 13:30:00 EDT 2011
这是正确的时间,但是cal.HOUR
给了我10
小时,显然是不应该是什么。为什么这样做?
答案 0 :(得分:13)
cal.HOUR
和cal.MINUTE
是用于Calendar
方法调用的静态最终整数。您可以使用此代码来获得正确的结果:
int hr = cal.get(Calendar.HOUR);
int min = cal.get(Calendar.MINUTE);
请注意,我调用了来自HOUR
的{{1}}和MINUTE
字段,而不是您的对象Calendar
。从实例化对象调用静态成员是不好的做法。
答案 1 :(得分:2)
拯救的伟大而全能的Android参考页面! :D http://developer.android.com/reference/java/util/Calendar.html
所以,这里有一些关于为什么其中一些东西没有返回你期望的结果的内容。首先,Calendar.HOUR不是对当前小时的引用。首先提示的是,它是全部大写的,按Java惯例,这意味着这是一个常量(又名final
)字段。如果您在Eclipse中进行开发,它可能会发出警告,说您应该引用类名为Calendar
的静态变量,而不是使用实例cal
。第二个提示:参考页面是这样说的! ;)
那么,你应该怎么做Calendar.HOUR
呢?这是一个静态常量,因此您可以使用cal.get()
来查找。 (参见参考页面http://developer.android.com/reference/java/util/Calendar.html#get(int))
但是!有一种更简单的方法。您可能正在寻找的代码可能是这样的:
public static String getRealTime(long time){
return new SimpleDateFormat("HH:mm").format(new Date(time));
//if you'd rather have the current time, just use new Date() without the time as a parameter
}
另一位用户要求提供类似的东西,此页面上还有其他一些实现Display the current time and date in an Android application