Проблема манипуляции датой Календаря Java - PullRequest
1 голос
/ 28 ноября 2010

Я пытаюсь получить текущую дату / время в следующем формате,

SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); 
// should display something similar to  2001.07.04 AD at 12:08:56 PDT
Calendar calendar = Calendar.getInstance();
calendar.set(2009, 2, 4, 10, 22, 44);
format.format( calendar.getTime() );
System.out.println(calendar.getTime());

Но отображается как среда, 04 марта, 10:22:44 IST 2009.

Второй вопрос: я хочу увидеть значение в миллисекундах установленного времени.

System.out.println(calendar.getTimeInMillis());

Но он всегда возвращает текущее значение времени в миллисекундах, а не время, которое я установил ранее.

Что мне здесь не хватает?

Ответы [ 3 ]

2 голосов
/ 28 ноября 2010

Метод SimpleDateFormat#format(Object) возвращает форматированный String, он не влияет на то, как возвращается метод Calendar#getTime().Для этого вы должны сделать:

System.out.println(format.format(calendar.getTime()));
1 голос
/ 28 ноября 2010

Для второй части вашего вопроса вы должны вызвать Calendar.get(Calendar.MILLISECONDS), чтобы получить поле миллисекунд календарного объекта.

1 голос
/ 28 ноября 2010

Первая проблема, которую я вижу, состоит в том, что format.format(calendar.getTime()); возвращает строку и фактически не меняет форматирование календаря.Вы захотите заменить последние две строки на System.out.println(format.format(calendar.getTime()));, чтобы фактически распечатать дату в указанном вами формате (при условии, что ваш SimpleDateFormat действителен, но с первого взгляда выглядит нормально).Конечно, насчет второй проблемы, с которой вы столкнулись, но у меня есть место для вас.Я не фанат формулировок Javadocs для getTime() и getTimeInMillis().Метод getTime() возвращает «объект Date, представляющий значение времени этого Calendar», в то время как getTimeInMillis() возвращает «текущее время в виде миллисекунд UTC от эпохи».Для меня разница в формулировках подразумевает, что getTimeInMillis() не использует дату, указанную объектом Calendar, даже если это метод экземпляра.Попробуйте System.out.println(calendar.getTime().getTime());, чтобы вызвать метод getTime() в представлении Date Календаря, который является документом для возврата времени в миллисекундах между 1 января 1970 года и датой, представленной объектом Date.

...