Вопрос

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

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

Правильно ли это?

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

Спасибо

Это было полезно?

Решение

Я не уверен, что представляет собой это количество, поскольку "количество миллиметров с 1 января 1970 года" не зависит от местоположения или перехода на летнее время.Но, возможно, этот расчет вам пригодится:

TimeZone london = TimeZone.getTimeZone("Europe/London");
long now = System.currentTimeMillis();
return now + london.getOffset(now);

Большинство приложений лучше обслуживать, используя либо время UTC, либо местное время;на самом деле это ни то, ни другое.Вы можете получить время UTC и время в определенной зоне следующим образом:

Instant now = Instant.now(); /* UTC time */
ZonedDateTime local = now.atZone(ZoneId.of("Europe/London"));

Другие советы

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

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

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

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

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

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

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()));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top