Календарь Google Как получить объект Date - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь отобразить события календаря Google с помощью API календаря Google в Java. Но я понятия не имею, как получить дату (и время) моих событий в приятном на вид формате. Единственное, что я могу сделать, это следующее:

DateTime now = new DateTime(System.currentTimeMillis());
Events events = service.events().list("primary")
        .setMaxResults(7)
        .setTimeMin(now)
        .setOrderBy("startTime")
        .setSingleEvents(true)
        .execute();
items = events.getItems();


items.get(0).getStart().getDateTime();

, что приводит к следующему выводу: 2018-11-06T18: 00: 00,000 + 01: 00

Любая идея о том, как ее получить, например. как объект даты?

1 Ответ

0 голосов
/ 06 ноября 2018

Согласно справочнику Google API тип DateTime имеет метод getValue(), который

Возвращает значение даты / времени, выраженное в виде количества миллисекунд. начиная с эпохи Unix.

Чтобы получить java.util.Date, мы можем использовать это long значение:

Date date = new Date(items.get(0).getStart().getDateTime().getValue());

Но обратите внимание, что начиная с Java 8 существует API java.time. Чтобы получить LocalDateTime, вы можете пойти так:

ZoneOffset offset = ZoneOffset.ofTotalSeconds(items.get(0).getStart().getDateTime().getTimeZoneShift() * 60);
ZoneId zone = ZoneId.ofOffset("UTC", offset);    
Instant instant = date.toInstant();
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, zone);

Для определения подходящего ZoneId мы используем метод getTimeZoneShift(), который

Возвращает смещение часового пояса от UTC в минутах или 0 только для даты значение.

Поскольку ZoneId.ofOffset принимает в качестве второго параметра значение в секундах, мы должны сначала преобразовать минуты, возвращенные на getTimeZoneShift(), в секунды.

...