Календарь дает мне неправильный час и минуту - PullRequest
3 голосов
/ 21 сентября 2011

Я пытаюсь получить время метки времени, но продолжаю получать неправильное время, когда использую 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 за час, который явно не то, что должно быть.Почему он это делает?

Ответы [ 2 ]

13 голосов
/ 21 сентября 2011

cal.HOUR и cal.MINUTE являются статическими конечными целыми числами для использования в вызовах методов Calendar. Вы бы использовали этот код для получения правильного результата:

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

Обратите внимание, что я вызвал поля HOUR и MINUTE из Calendar, а не ваш объект cal. Это плохая практика вызывать статические члены из экземпляра объекта.

2 голосов
/ 21 сентября 2011

Великий и всемогущий Android Справочная страница для спасения !!!: D http://developer.android.com/reference/java/util/Calendar.html

Итак, ниже приведено объяснение того, почему некоторые из этих вещей не дают ожидаемых результатов.Прежде всего, Календарь. ЧАС не является ссылкой на текущий час.Первым намеком на это является тот факт, что он присутствует во всех заглавных буквах, что в соответствии с 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
} 

Другой пользователь запросилСорта схожих вещей и есть несколько других реализаций на этой странице Отображение текущего времени и даты в приложении для Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...