Получить время в Лондоне - PullRequest
5 голосов
/ 29 марта 2010

Как узнать текущее местное время в часах (в миллис с 1 января 1970 года) в Лондоне? Поскольку мое приложение может работать на сервере в любом месте, я думаю, что мне нужно использовать часовой пояс «Европа / Лондон». Мне также нужно принять во внимание переход на летнее время, т. Е. Приложение должно добавить час в течение «лета».

Я бы предпочел использовать стандартные библиотеки java.util.

Это правильно?

TimeZone tz = TimeZone.getTimeZone("Europe/London") ;
Calendar cal = Calendar.getInstance(tz);
return cal.getTime().getTime() + tz.getDSTSavings();

Спасибо

Ответы [ 3 ]

11 голосов
/ 29 марта 2010

Вам не нужно Calendar, только TimeZone.

TimeZone london = TimeZone.getTimeZone("Europe/London");
long now = System.currentTimeMillis();
return now + london.getOffset(now);
4 голосов
/ 29 марта 2010

Другие говорили, что это может быть не очень хорошая идея - я считаю, что это зависит от вашей ситуации, но использование UTC, безусловно, стоит рассмотреть.

Тем не менее, я думаю, что вы что-то здесь упустили: количество секунд, которые произошли с 1 января 1970 года UTC (именно так всегда определяется эпоха Unix - и фактически оно такое же, как Лондон, поскольку смещение на эту дату было 0) можно получить с любым из следующих выражений:

System.currentTimeMillis()
new Date().getTime()
Calendar.getInstance().getTime().getTime()

Если подумать, количество миллисекунд с этого конкретного момента не меняется в зависимости от того, в каком часовом поясе вы находитесь.

Да, и нормальное предложение - для гораздо лучшего API даты и времени см. Joda Time .

2 голосов
/ 01 апреля 2011

Чтобы узнать текущее время в Лондоне:

SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(f.format(GregorianCalendar.getInstance().getTime()));
...