Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Android 写一个可以在安卓和苹果手机上运行的ics文件,但知道在事件发生之前时区会改变_Android_Ios_Datetime_Icalendar - Fatal编程技术网

Android 写一个可以在安卓和苹果手机上运行的ics文件,但知道在事件发生之前时区会改变

Android 写一个可以在安卓和苹果手机上运行的ics文件,但知道在事件发生之前时区会改变,android,ios,datetime,icalendar,Android,Ios,Datetime,Icalendar,我已经创建了一个ics文件,其中列出了我将与大约50名其他人组成的团队一起工作的一场圣诞秀的表演。我在今天创建了它(英国在夏季),但日期都在12月和1月(英国将回到格林尼治标准时间)。我已经对ics文件中包含的内容做了相当多的研究,以确保时区更改不会成为问题,但我显然要到10月30日(英国进入格林尼治标准时间)之后才能进行测试。这个日历的所有用户都将在英国,我计划通过将ics文件上传到dropbox来共享它,所以我不会通过URL共享它。出于这个原因,我避免使用UTC(带“z”后缀)指定时间,因为

我已经创建了一个ics文件,其中列出了我将与大约50名其他人组成的团队一起工作的一场圣诞秀的表演。我在今天创建了它(英国在夏季),但日期都在12月和1月(英国将回到格林尼治标准时间)。我已经对ics文件中包含的内容做了相当多的研究,以确保时区更改不会成为问题,但我显然要到10月30日(英国进入格林尼治标准时间)之后才能进行测试。这个日历的所有用户都将在英国,我计划通过将ics文件上传到dropbox来共享它,所以我不会通过URL共享它。出于这个原因,我避免使用UTC(带“z”后缀)指定时间,因为一些用户将使用Android手机,而其他用户则希望在他们的iPhone上使用

我一开始就使用了VTIMEZONE声明(我不太了解所有变量,但我在某处找到了一个欧洲/伦敦版本并复制/粘贴了它),还有X-WR-TIMEZONE变量(尽管我在某处读到这两个变量不应该共存)。为了安全起见,我还将TimezoneID(TZID)添加到每个VEVENT中的每个开始日期和结束日期

如果有人在这一领域有专业知识,可以通过我的代码打开一看,让我知道事件时间是否正确(如现在),当时钟在英国变化时,我将不胜感激。时间改变(10月30日)后再分发就太晚了

我的ics文件的开头如下

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