首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BiWeekly迭代夏令时更改

BiWeekly迭代夏令时更改
EN

Stack Overflow用户
提问于 2020-02-13 13:35:54
回答 1查看 117关注 0票数 0

我正在尝试使用Java BiWeekly库在夏令时更改中迭代一个事件。

假设活动在早上8点开始,我希望它保持在上午8点,而不管夏令时是否生效。

以下代码来自BiWeekly网站:https://github.com/mangstadt/biweekly/wiki/Examples#calculating-the-dates-in-a-recurring-event

代码语言:javascript
复制
ICalendar ical = ...
TimezoneInfo tzinfo = ical.getTimezoneInfo();

VEvent event = ical.getEvents().get(0);
DateStart dtstart = event.getDateStart();

TimeZone timezone;
if (tzinfo.isFloating(dtstart)){
  timezone = TimeZone.getDefault();
} else {
  TimezoneAssignment dtstartTimezone = tzinfo.getTimezone(dtstart);
  timezone = (dtstartTimezone == null) ? TimeZone.getTimeZone("UTC") : dtstartTimezone.getTimeZone();
}
DateIterator it = event.getDateIterator(timezone);

如果我有一个celendar被创建为:

代码语言:javascript
复制
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Michael Angstadt//biweekly 0.6.3//EN
BEGIN:VEVENT
UID:deb01413-942a-4ea9-a53c-541493fa668a
DTSTAMP:20200213T051827Z
SUMMARY;LANGUAGE=en-us:Team Meeting
DTSTART;TZID=/Pacific/Auckland:20200213T181827
DURATION:PT1H
RRULE:FREQ=WEEKLY;INTERVAL=2
END:VEVENT
END:VCALENDAR

对此进行迭代,当时间跨越夏令时边界时,时间会变化一个小时。

应该如何做才能保证事件在给定的时间内发生?(它在UTC中同时发生是正确的,但我希望它在本地同时发生。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-14 07:18:13

由于某些原因,即使在事件的DTSTART中存在时区,上面代码中的dtstartTimezone也返回null。(这可能是另一个需要追踪的问题。)

因为这是null,所以迭代器将获得UTC时区,因此迭代的日期是基于UTC的,并且在跨越目标时区中的夏令时边界时会发生更改。

删除将时区从日历中拉出的时区分配代码,并将其替换为val timezone = TimeZone.getTimeZone("Pacific/Auckland") (或适当的时区),然后在迭代器中使用它可以解决此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60201071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档