JAVA: преобразование GMT ​​в местное время

Я разрабатываю программное обеспечение в java.

Я получаю метку времени по Гринвичу с сервера. Программу можно использовать в любой точке мира. Теперь я хочу получить местный часовой пояс, в котором работает программное обеспечение, и преобразовать это время по Гринвичу в местное время.

Пожалуйста, скажите мне, как это сделать?


person DJ'    schedule 14.04.2012    source источник
comment
Разве простой Calendar.getInstance().getTimeZone().getDisplayName() не даст вам местный часовой пояс?   -  person Raveesh Sharma    schedule 14.04.2012


Ответы (4)


Чтобы получить местный часовой пояс:

Календарь.getInstance().getTimeZone().getDisplayName()

Для преобразования:

Конвертация Date TimeZone в java?

person Raveesh Sharma    schedule 14.04.2012

Предполагая, что ваш timestamp является либо Date, либо Number:

final DateFormat formatter = DateFormat.getDateTimeInstance();
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(formatter.format(timestamp));

Если ваша временная метка указана как String, вам сначала нужно ее проанализировать. Вы найдете множество примеров с пользовательским форматом в SimpleDateFormat , простой пример со встроенным форматом:

final DateFormat formatter = DateFormat.getDateTimeInstance();
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
final Date timezone = formatter.parse("2012-04-14 14:23:34");
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(formatter.format(timezone));
person Tomasz Nurkiewicz    schedule 14.04.2012

Взгляните на Joda-Time. Он имеет все необходимые функции, связанные с датой

person Wim Deblauwe    schedule 14.04.2012

Предполагая время сервера в формате yyyy/MM/dd HH:mm:ss.SSS, это работает:

String serverTime = "2017/12/06 21:04:07.406"; // GMT
ZonedDateTime gmtTime = LocalDateTime.parse(serverTime, DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS")).atZone(ZoneId.of("GMT"));
LocalDateTime localTime = gmtTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();
person rsinha    schedule 14.12.2017