Google日历如何获取日期对象

时间:2018-11-06 10:48:32

标签: java date calendar format google-calendar-api

我正在尝试使用Java中的Google日历API显示Google日历的事件。 但是我对如何以一种美观的格式获取事件的日期(和时间)一无所知。我唯一能做的是以下事情:

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 :(得分:0)

根据Google API reference,类型DateTime具有方法getValue()

  

返回以毫秒数表示的日期/时间值   从Unix时代开始。

要获取java.util.Date,我们可以使用以下long值:

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

但是请注意,自Java 8起就有了java.time API。要获得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()返回的分钟数首先转换为秒。