Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何匹配dateuilts.rrule和python icalendar daylightsavingtime aware_Python_Date_Datetime_Icalendar_Rrule - Fatal编程技术网

如何匹配dateuilts.rrule和python icalendar daylightsavingtime aware

如何匹配dateuilts.rrule和python icalendar daylightsavingtime aware,python,date,datetime,icalendar,rrule,Python,Date,Datetime,Icalendar,Rrule,我正在处理一些棘手的问题 我有一个有趣的活动 BEGIN:VEVENT UID:Event/termine/gps/akt@portal.augusta.de DTSTART;TZID=CET:20150529T190000 DTEND;TZID=CET:20150529T220000 CATEGORIES:Arbeitsgruppe DTSTAMP:20110620T075538Z EXDATE;TZID=CET:20151225T190000 LAST-MODIFIED:20150424T

我正在处理一些棘手的问题

我有一个有趣的活动

BEGIN:VEVENT
UID:Event/termine/gps/akt@portal.augusta.de 
DTSTART;TZID=CET:20150529T190000
DTEND;TZID=CET:20150529T220000
CATEGORIES:Arbeitsgruppe
DTSTAMP:20110620T075538Z
EXDATE;TZID=CET:20151225T190000
LAST-MODIFIED:20150424T201707Z
LOCATION:Vereinsräume des Augsburger Computer Forum e.V.
PRIORITY:5
RRULE:FREQ=MONTHLY;BYDAY=-1FR
SUMMARY:GPS-Arbeitsgruppe
URL:https://www.augusta.de/termine/gps
END:VEVENT
正如您所见,每个月的最后一个星期五都会有一个RRule重复此事件

我用icalendar解析了这个ical

我正在使用:

start = iobj.get( 'DTSTART' ).dt
rrset = rruleset()
rrule = iobj.get( 'RRULE' )
exdate = iobj.get( 'EXDATE' )
rrset.rrule( rrule.rrulestr( rule.to_ical(), dtstart = start ) )
for edate in exdate.dts : 
    rrset.exdate( edate.dt )
到目前为止一切正常

当我试图获得下一次约会时,比如说10次约会:

list(rrset)[:10] 
我得到:

[datetime.datetime(2015, 5, 29, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 6, 26, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 7, 31, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 8, 28, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 9, 25, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 10, 30, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 11, 27, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 12, 25, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2016, 1, 29, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2016, 2, 26, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)]
[datetime.datetime(2015,5,29,19,0,tzinfo=),
datetime.datetime(2015,6,26,19,0,tzinfo=),
datetime.datetime(2015,7,31,19,0,tzinfo=),
datetime.datetime(2015,8,28,19,0,tzinfo=),
datetime.datetime(2015,9,25,19,0,tzinfo=),
datetime.datetime(2015,10,30,19,0,tzinfo=),
datetime.datetime(2015,11,27,19,0,tzinfo=),
datetime.datetime(2015,12,25,19,0,tzinfo=),
datetime.datetime(2016,1,29,19,0,tzinfo=),
datetime.datetime(2016,2,26,19,0,tzinfo=)]
乍一看似乎还可以,但在更深入的检查中,从10月30日开始存在问题,夏令时结束于10月25日,但datetime对象的tzinfo信息仍然是“DSTZInfo'CET'CEST+2:00:00 DST”

第二个问题是,12月25日在该列表中,而不是在EXDATE中指定的日期被跳过。解析exdate规则夏令时时要解决的问题已正确计算,因此exdate 19:00:00+01:00与计算的重复时间19:00:00+02:00不匹配

我做错什么了吗


将所有内容转换为UTC并在那里进行处理没有任何帮助,因为UTC 17:00:00也与UTC 18:00:00不匹配。

完整的测试脚本可以在上找到,我认为正确的做法是在github上为
dateutils
提交罚单,我刚刚看到您已经这样做了。