2016-03-23 5 views
1

Мне нужна помощь для моего проекта.Получить локаль Дата Время Строка с GMT по времени в JAVA

У моей базы данных есть временные рамки с GMT как этот объект {userid: "XTGTS12", timezoneoffset: -8} в GMT/UTC -8: 00, который является языковой версией PST. каждый пользователь в разном часовом поясеОфис по всему миру.

мне нужно отправить уведомление толчок к пользователю сообщая им сервер вниз время, как: «Сервер собирается остановки на {0}»

админ пройти время по Гринвичу долго мне и мне нужно вытащить весь пользовательский объект в соответствии с целым числом timezoneoffset, чтобы генерировать дату и время и целую строку для пользователя в свое местное время.

Я не уверен, как реализовать на Java.

Если администратор передать мне время по Гринвичу длинный, который 2016-04-01 00:00:00

Заключительная строка следует отправить пользователю в timezoneOffset -8 является «Сервер собирается выключение на 2016-03-31 16:00:00 «

+0

есть метод [ '.setTimeZone()'] (https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#setTimeZone%28java.util.TimeZone%29) в 'SimpleDateFormat' и [' TimeZone.getTimeZone () '] (https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getTimeZone%28java.lang.String%29) - это поможет вам отформатировать временную метку в частности, часовой пояс. –

+0

Я думаю, что лучший способ - разобраться с местным временем на стороне клиента (возможно, в javascript) и только GMT на стороне сервера. –

+0

Кстати, для такого важного сообщения я бы добавил смещение (или имя часового пояса), чтобы очистить, вы показываете время, скорректированное на конкретную локаль. –

ответ

1

Вот что вам нужно сделать. Но я надеюсь, вы понимаете, что хранение offset-from-UTC, а не time zone ID, означает, что каждый пользователь будет «застревать» в стандартное время. То есть пользователь со смещением -8, как вы говорите, находится в PST, хотя 1 апреля они должны быть в PDT или -7 часов с UTC.

Так вот ответ, использующий фиксированное смещение, и предполагая, что millis является вашим «GMT time long». В этом коде используется инфраструктура java.time, встроенная в Java 8 и более поздние версии (см. Tutorial).

Instant inst = Instant.ofEpochMilli(millis); 
    OffsetDateTime odt = inst.atOffset(ZoneOffset.ofHours(-8)); 
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
    System.out.println(f.format(odt)); 

Теперь, вы должны понять, что вы на самом деле хотите, чтобы связать пользователя с time zone как America/Los_Angeles или PST8PDT, вы должны вместо этого:

Instant inst = Instant.ofEpochMilli(millis); 
    ZonedDateTime zdt = inst.atZone(ZoneId.of("PST8PDT")); 
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
    System.out.println(f.format(zdt)); 

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

  • Нет связанных вопросов^_^