我正在尝试使用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
关于如何获取它的任何想法,例如作为日期对象?
答案 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()
返回的分钟数首先转换为秒。