Время и дата вернулись правильны кроме за час, что 1 час меньше, чем должно быть.
Я, кажется, установив все, что требуется, чтобы получить правильное время и дату:Почему Календар возвращает неправильный час с правильным часовым поясом?
- I'm using Calendar.getInstance(), instead of new Date()
- I'm setting the timezone of the Calendar instance with Timezone.getTimeZone
- I'm using DateFormat and SimpleDateFormat to format the output
Мой часовой пояс является Eastern Standard Time
, иначе UTC/GMT-5:00
. Ни одна из этих линий не оказывают никакого эффекта:
- cal.setTimeZone(TimeZone.getTimeZone(cal.getTimeZone().getDisplayName()));
- cal.setTimeZone(TimeZone.getTimeZone("EST"));
- cal.setTimeZone(TimeZone.getTimeZone("UTC"));
- cal.setTimeZone(TimeZone.getTimeZone("GMT"));
- cal.setTimeZone(TimeZone.getTimeZone("GMT-5:00"));
... но каждый из этих вариантов задает нужный мне часовой пояс.
Вот моя попытка, где я ошибочно добавляя 1 час к экземпляру
Calendar
:
PrintWriter output = null;
try {
output = new PrintWriter(
new BufferedWriter(new FileWriter("output.txt", true)));
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:ms MM/dd/yyyy");
Calendar cal = Calendar.getInstance();
// ...doesn't seem to be working:
cal.setTimeZone(TimeZone.getTimeZone(cal.getTimeZone().getDisplayName()));
/*
* adding an extra hour here, to make up for the incorrect hour value???
* ...without this line, everything is correct except the hour = n - 1:
*/
//cal.setTimeInMillis(cal.getTimeInMillis() + (1000 * 60 * 60));
// printing to console here:
System.out.println(dateFormat.format(cal.getTime()));
System.out.println(cal.getTimeZone().getDisplayName());
// printing to the log-file here:
output.println(dateFormat.format(cal.getTime()));
output.println(cal.getTimeZone().getDisplayName());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (output != null) {
output.close();
}
}
Выход:
10:05:43:543 10/10/2013
GMT-05:00
НЕПРАВИЛЬНО - Это должно быть 11:05:43:543
! (приписка - я, к сожалению, не может использовать Joda-Time)
Летнее время? – John
@ Джон - я не знаю, хороший вопрос ... дневной сберегательный период в этом году, по-видимому, начинается в воскресенье 10 марта и заканчивается в воскресенье 3 ноября. Могли ли «Календарь» и/или «Часовой пояс» * не учитывать это? –
Существует ответ в ссылке: http://stackoverflow.com/questions/10545960/how-to-tackle-daylight-savings-using-timezone-in-java Надеюсь, что это будет полезно. – guanda