форматировать как время по Гринвичу / UTC, когда часовой пояс по умолчанию является чем-то другим - PullRequest
6 голосов
/ 19 января 2010

У меня есть программа, которая должна работать в моем местном часовом поясе по другим причинам, но для одной процедуры мне нужно вывести даты, используя SimpleDateFormat в GMT.

каков самый аккуратный способ сделать это?

Ответы [ 2 ]

10 голосов
/ 19 января 2010

Использование стандартного API :

Instant now = Instant.now();
String result = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
                                 .withZone(ZoneId.of("GMT"))
                                 .format(now);
System.out.println(result);

Новые DateTimeFormatter экземпляры являются неизменяемыми и могут использоваться в качестве статических переменных.

Использование старого стандартного API:

TimeZone gmt = TimeZone.getTimeZone("GMT");
DateFormat formatter = DateFormat.getTimeInstance(DateFormat.LONG);
formatter.setTimeZone(gmt);
System.out.println(formatter.format(new Date()));
8 голосов
/ 19 января 2010

Учитывая, что SimpleDateFormat не является потокобезопасным, я бы сказал, что самый аккуратный способ - вместо этого использовать Joda Time .Затем вы можете создать единый форматер (позвонив по номеру withZone(DateTimeZones.UTC), чтобы указать, что вы хотите использовать UTC), и вы в отъезде:

private static DateTimeFormatter formatter = DateTimeFormat.forPattern(...)
    .withZone(DateTimeZone.UTC);

...

String result = formatter.print(instant);

Это имеет еще одно преимущество: вы можете использовать Joda Time в другом месте своего кода,что всегда хорошая вещь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...