【问题标题】:Calendar giving me the wrong hour and minute日历给了我错误的小时和分钟
【发布时间】:2011-09-21 04:12:57
【问题描述】:

我正在尝试获取时间戳的时间,但是当我使用 Calendar.HOURCalendar.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 的小时显然不是它应该是什么。为什么要这样做?

【问题讨论】:

    标签: android calendar


    【解决方案1】:

    cal.HOURcal.MINUTE 是用于Calendar 方法调用的静态最终整数。您将使用此代码来获得正确的结果:

       int hr = cal.get(Calendar.HOUR);
       int min = cal.get(Calendar.MINUTE);
    

    请注意,我从Calendar 调用了HOURMINUTE 字段,而不是您的对象cal。从实例化对象调用静态成员是不好的做法。

    【讨论】:

      【解决方案2】:

      伟大而全能的 Android 参考页面来救援!!! :Dhttp://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

      【讨论】:

      • 呸,我写答案的时间太长了! :D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2012-11-18
      相关资源
      最近更新 更多