当我从Graph API获取日期(事件或任务)时,它将保存在DateTimeTimeZone类的实例中。此对象由作为字符串的2个属性(日期时间和时区)组成,并且呈现UTC日期。有没有办法将这个“日期”转换为本地DateTime?
答案 0 :(得分:4)
DateTimeTimeZone
提供了采用Datetime和timezone字符串的扩展方法,您可以通过进入类DateTimeTimeZoneExtensions
答案 1 :(得分:0)
要提供一种可行的替代方法来转换为 LocalDateTime 或 Date ,但这些都不建议一起使用,您可以在 Java 中执行以下操作(基于 Event event
的示例)
DateTimeTimeZone 到 LocalDateTime:
SimpleDateFormat graphDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.0000000'");
// set preferable timezone
graphDateFormat.setTimeZone(TimeZone.getTimeZone("UTC");
// set preferable zoneID
ZoneId timeZoneID = ZoneId.of("Europe/Brussels");
LocalDateTime startDateTime = LocalDateTime.ofInstant(graphDateFormat.parse(event.start.dateTime).toInstant(), timeZoneID);
DateTimeTimeZone 到日期:
Date startDate = Date.from(Instant.parse(graphCalendarEvent.start.dateTime.substring(0, 20) + "Z"));
从 LocalDateTime 到 DateTimeTimeZone 的转换:
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeTimeZone dateTimeTimeZone = new DateTimeTimeZone();
dateTimeTimeZone.dateTime = localDateTime.toString();
// set preferable timezone
dateTimeTimeZone.timeZone = "W. Europe Standard Time";
记住人们,仅仅因为它可以投入生产,并不意味着它应该!