Как получить в апплете формат с правильной временной зоной?

0
12 апр 2016 13:30


Вот статический класс, который возвращает мне шаблон для записи даты:
public class NetworkUtils {
    public static DateFormat ISO_DateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    static {
        TimeZone zone = TimeZone.getDefault();
        ISO_DateFormat.setTimeZone(zone);
    }
}

И потом я использую этот шаблон в другом классе:
 dateString = NetworkUtils.ISO_DateFormat.format(date);

Но почему-то не срабатывает. Сижу во второй зоне, а получаю нулевую. В чем может быть дело? Какие-то особенности в апплетах?

Ответов: 2

1
13 апр 2016 09:50
О! Вот после вашего же ответа на вопрос я понял, что вам именно нужно было и где проблема :)

У вас все проблемы из-за того, что в строке формата Z в апострофах. Т.е. вместо подстановки фактической клиентской зоны (Z без апострофов) вы вседа пишите Z. Естественно, у вас получается строрка в "UTC" . Ваше решение явно использует зону UTC, поэтому время получается правильно.

Еще у вас вызов getDefault() лишний, он ничего не дает. Можно сразу вызывать getTimeZone.

Так что есть два варианта:
ISO_DateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
TimeZone zone = TimeZone.getTimeZone("UTC");


Или
ISO_DateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
TimeZone zone = TimeZone.getDefault();


Еще отмечу, что Z - это RFC 822 а не ISO 8601. Для ISO нужно использовать X, поддержка добавлена начиная с Java 7.
0
13 апр 2016 08:23
Вот так надо:
TimeZone zone = TimeZone.getDefault().getTimeZone("UTC");

Тогда время пересчитается при записи в строку.
Модераторы: Нет
Сейчас эту тему просматривают: Нет