2015-10-30 2 views
2

Я пытаюсь преобразовать экземпляр календаря для мгновенного и я делаю это следующим образомtoInstant() в календаре показывается в GMT вместо местного времени

Calendar cal = new GregorianCalendar(); 
    System.out.println(cal.getTime()); 
    Instant inst = cal.toInstant(); 
    System.out.println(inst.toString()); 

И, выход для него следующим образом

пт 30 октября 17:23:40 IST 2015

2015-10-30T11: 53: 40.037Z

Итак, мой вопрос касается разницы в результатах из Календаря и момента. Выход из этого момента находится в GMT вместо местного времени. Я не видел никакой документации, в которой говорится, что Instant-класс дает только дату в GMT. Итак, я не уверен, почему это происходит.

ответ

0

answer по Рават верно. Instant всегда по UTC по определению.

Формат строкового представления генерируемой методом toString является стандартным, определяется стандартом ISO 8601.

Instant класс является частью каркаса java.time встроенного в Java 8 и более поздних версий. Новые классы в этой структуре заменяют старые классы java.util.Date/.Calendar с первых дней Java.

Избегайте старых классов, поскольку они, как известно, хлопотны. Не смешивайте старые и новые. Методы преобразования, такие как toInstant, предназначены только для использования, когда взаимодействие со старым кодом еще не обновлено для новых типов.

Чтобы настроить Instant в часовой пояс, укажите часовой пояс через объект ZoneId, чтобы произвести ZonedDateTime.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 

не пугайтесь «локальным» в LocalDateTime классе. Этот класс представляет собой смутное представление о дате-времени. Он не относится к любому часовому поясу и поэтому не привязан к временной шкале.

2

Вызов ToString на Instant производит вывод, как следующее:

2013-05-30T23: 38: 23.085Z

Этот формат следует ISO-8601 стандарт для представления даты и времени .

Посмотрите:

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