Android 写一个可以在安卓和苹果手机上运行的ics文件,但知道在事件发生之前时区会改变
我已经创建了一个ics文件,其中列出了我将与大约50名其他人组成的团队一起工作的一场圣诞秀的表演。我在今天创建了它(英国在夏季),但日期都在12月和1月(英国将回到格林尼治标准时间)。我已经对ics文件中包含的内容做了相当多的研究,以确保时区更改不会成为问题,但我显然要到10月30日(英国进入格林尼治标准时间)之后才能进行测试。这个日历的所有用户都将在英国,我计划通过将ics文件上传到dropbox来共享它,所以我不会通过URL共享它。出于这个原因,我避免使用UTC(带“z”后缀)指定时间,因为一些用户将使用Android手机,而其他用户则希望在他们的iPhone上使用 我一开始就使用了VTIMEZONE声明(我不太了解所有变量,但我在某处找到了一个欧洲/伦敦版本并复制/粘贴了它),还有X-WR-TIMEZONE变量(尽管我在某处读到这两个变量不应该共存)。为了安全起见,我还将TimezoneID(TZID)添加到每个VEVENT中的每个开始日期和结束日期 如果有人在这一领域有专业知识,可以通过我的代码打开一看,让我知道事件时间是否正确(如现在),当时钟在英国变化时,我将不胜感激。时间改变(10月30日)后再分发就太晚了 我的ics文件的开头如下Android 写一个可以在安卓和苹果手机上运行的ics文件,但知道在事件发生之前时区会改变,android,ios,datetime,icalendar,Android,Ios,Datetime,Icalendar,我已经创建了一个ics文件,其中列出了我将与大约50名其他人组成的团队一起工作的一场圣诞秀的表演。我在今天创建了它(英国在夏季),但日期都在12月和1月(英国将回到格林尼治标准时间)。我已经对ics文件中包含的内容做了相当多的研究,以确保时区更改不会成为问题,但我显然要到10月30日(英国进入格林尼治标准时间)之后才能进行测试。这个日历的所有用户都将在英国,我计划通过将ics文件上传到dropbox来共享它,所以我不会通过URL共享它。出于这个原因,我避免使用UTC(带“z”后缀)指定时间,因为
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CSV to iCal Convertor//Manas Tungare, manas.tungare.name//EN
X-WR-CALNAME;VALUE=TEXT:Panto Dates
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETTO:-0000
TZOFFSETFROM:+0100
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T010000
TZOFFSETTO:+0100
TZOFFSETFROM:-0000
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
X-WR-TIMEZONE:Europe/London
BEGIN:VEVENT
SUMMARY:T1 (Tech)
DESCRIPTION:
DTSTAMP:20161203T100000
DTSTART;TZID=Europe/London:20161203T100000
DTEND;TZID=Europe/London:20161203T200000
END:VEVENT
BEGIN:VEVENT
*(......more events.....)*
看起来正常,但VTIMEZONE组件中的DTStart除外。我不是英国时区历史的专家,但夏时制可能不是在1601年建立的。。。 也就是说,很多客户只是忽略了时区定义,而仅仅依赖于TZID(如果TZID存在并为他们所知) 在任何情况下,类似于以下的方法可能会更好:
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
DTSTART:19960331T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:BST
END:DAYLIGHT
END:VTIMEZONE
看起来正常,但VTIMEZONE组件中的DTStart除外。我不是英国时区历史的专家,但夏时制可能不是在1601年建立的。。。 也就是说,很多客户只是忽略了时区定义,而仅仅依赖于TZID(如果TZID存在并为他们所知) 在任何情况下,类似于以下的方法可能会更好:
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
DTSTART:19960331T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:BST
END:DAYLIGHT
END:VTIMEZONE