2014-01-06 3 views
-1

Мои системные часы в настоящее время показывают 9:54 AM как время. Однако, если я делаю следующее:Значение, возвращаемое функцией calender.get (Calendar.HOUR), отличается от времени системного времени?

Calendar cal = Calendar.getInstance(); 
System.out.println("Now: " 
        + cal.get(Calendar.AM_PM) + " , " 
        + cal.get(Calendar.HOUR) + " , " 
        + cal.get(Calendar.MINUTE)); 

Я получаю результат:

Now: 0 , 7 , 53 

Так AM значение/PM правильно, и протоколы являются правильными, но час возвращается в другое время, чем мои системные часы.

Что вызывает это? Я нахожусь в Linux, если это имеет значение.

+0

Считаете ли вы использование 'Calendar.HOUR_OF_DAY'? –

+0

И «HOUR», и «HOUR_OF_DAY» принесут мне правильный результат. Вы пытались проверить «Локаль»? – SudoRahul

+2

Это может быть связано с настройками часового пояса. – dasblinkenlight

ответ

2

У меня проблема, и это была моя ошибка.

Я сериализую этот класс, сохраняя его в файле, а затем не инициализируя его и загружая его из файла при каждом запуске программы.

календаря член моего класса был также сериализация и загружается из файла каждый раз, и поэтому час не обновлялся с 7 утра, когда файл был последним сохраненным:

public class Foo implements Serializable 
{ 
    private final Calendar cal = Calendar.getInstance(); 
} 

Я изменила эту переменную на статическую, то есть:

public class Foo implements Serializable 
{ 
    private final static Calendar cal = Calendar.getInstance(); 
} 

Редактировать: Дальнейшие испытания показали, что даже если вы загружаете календарь при запуске программы, его время не обновляется каждую секунду, поэтому, если вы загружаете программу, а через 5 минут попытаетесь получить текущее время, вы получите время от 5 минут назад. Решение состоит в том, чтобы всегда получать экземпляр прямо перед проверкой времени.

Смежные вопросы