Icalendarで使用されるVTIMEZONEは何ですか?
例えば1
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.12.3//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Asia/Shanghai
BEGIN:STANDARD
TZOFFSETFROM:+0900
RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYMONTH=9;BYDAY=3SU
DTSTART:19890917T000000
TZNAME:GMT+8
TZOFFSETTO:+0800
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0800
DTSTART:19910414T000000
TZNAME:GMT+8
TZOFFSETTO:+0900
RDATE:19910414T000000
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
TRANSP:OPAQUE
LAST-MODIFIED:20170305T083916Z
UID:[email protected]
DTSTAMP:20170305T083916Z
LOCATION:Cell Group
DESCRIPTION:
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Study Bible
DTSTART;TZID=Asia/Shanghai:20170324T193000
DTEND;TZID=Asia/Shanghai:20170324T213000
X-Apple-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
CREATED:20160312T140632Z
RRULE:FREQ=WEEKLY;BYDAY=FR
BEGIN:VALARM
X-WR-ALARMUID:9B47E27E-9063-417E-B488-409387A3201A
UID:9B47E27E-9063-417E-B488-409387A3201A
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACKNOWLEDGED:20161125T105826Z
X-Apple-DEFAULT-ALARM:TRUE
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR
VTIMEZONE:タイムゾーンを定義するコンポーネントプロパティのグループ化を提供します。
場所の冬時間と夏時間を記述するルールはありますか?
IcalendarオブジェクトでVTIMEZONEコンポーネントを指定する必要はありません。代わりに、ローカル時間をutc時間に変換し、icalendarイベントをエクスポートします。
# Before
DTSTART:20170324T113000Z
DTEND:20170324T130000
# After
DTSTART;TZID=Asia/Shanghai:20170324T193000
DTEND;TZID=Asia/Shanghai:20170324T213000
2.1これは理にかなっていますか? VTIMEZONEのないicalendarオブジェクト
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.12.3//EN
BEGIN:VEVENT
TRANSP:OPAQUE
LAST-MODIFIED:20170305T083916Z
UID:[email protected]
DTSTAMP:20170305T083916Z
LOCATION:Cell Group
DESCRIPTION:
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Study Bible
DTSTART;TZID=Asia/Shanghai:20170324T113000
DTEND;TZID=Asia/Shanghai:20170324T213000
X-Apple-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
CREATED:20160312T140632Z
RRULE:FREQ=WEEKLY;BYDAY=FR
BEGIN:VALARM
X-WR-ALARMUID:9B47E27E-9063-417E-B488-409387A3201A
UID:9B47E27E-9063-417E-B488-409387A3201A
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACKNOWLEDGED:20161125T105826Z
X-Apple-DEFAULT-ALARM:TRUE
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR
2.2これが理にかなっている場合、VTIMEZONEの使用法は何ですか?
たとえばたとえば1。
....
BEGIN:VTIMEZONE
TZID:Asia/Shanghai <- Part 1
.....
END:VTIMEZONE
BEGIN:VEVENT
....
DTSTART;TZID=Asia/Shanghai:20170324T193000 <- Part 2
DTEND;TZID=Asia/Shanghai:20170324T213000 <- Part 3
....
END:VEVENT
3.1。 VEVENTのタイムゾーンはVTIMEZONEと一致している必要がありますか?
3.2他のタイムゾーンを使用してパート2とパート3の時間を記述できますか?
例えば.
....
BEGIN:VTIMEZONE
TZID:Asia/Shanghai <- Part 1
.....
END:VTIMEZONE
BEGIN:VEVENT
....
DTSTART:20170324T193000Z <- Part 2 UTC time
DTEND:20170324T213000Z <- Part 3 UTC Time
....
END:VEVENT
1。VTIMEZONEの定義は何ですか?
VTIMEZONEは、タイムゾーンが任意の時点(つまり、夏時間であるときと標準時間であるとき)で持つUTCオフセットの特定のルールを格納するために使用されます。
2。VTIMEZONEの用途は何ですか?
これは、UTCではなく特定のタイムゾーンでiCalendar全体のさまざまなタイムスタンプをフォーマットする場合に使用されます。
あなたは尋ねるかもしれません:すべての場所でUTCを使用しないのはなぜですか?それはより単純ではないでしょうか?答えは、タイムゾーンが必要なため繰り返しルールです。繰り返しイベントがあり、そのイベントが夏時間/標準の境界を超える場合、そのイベントのタイムゾーンを指定する必要があります。 UTCを使用したばかりの場合、日光/標準境界を通過すると、イベントの時刻が不正確になります。
2.1これは意味がありますか?VTIMEZONEなしのicalendarオブジェクト
あなたの例は間違っています。
この例のDTENDプロパティは、存在しないVTIMEZONEコンポーネント( "Asia/Shanghai")を参照しています。
DTEND;TZID=Asia/Shanghai:20170324T213000
ICalendarパーサーはそのTZIDパラメータを調べ、次に、TZIDプロパティがそれに一致するVTIMEZONEコンポーネントを探します。 iCalendarオブジェクトにはそのようなVTIMEZONEがないため、iCalendarパーサーは技術的にその日付を解釈する方法を知りません。 TZIDパラメーターは単に一意の識別子として扱われます。それ自体には意味がありません。
特定のタイムゾーンで日付をフォーマットしたいが、iCalendarオブジェクトにVTIMEZONEコンポーネントを含めたくない場合は、グローバルタイムゾーンIDを使用できます。グローバルタイムゾーンIDはスラッシュで始まるため、通常のTZIDパラメーターとは異なります。
DTEND;TZID=/Asia/Shanghai:20170324T213000
グローバルタイムゾーンIDの欠点は、iCalendar仕様がこれらのIDがパーサーによって解釈されることになっている方法を指定しないことです。ただし、実際には、グローバルIDをサポートするすべてのパーサーのうち、それらのほとんどはおそらくそれらをOlson IDとして扱うと思います。
.1。VEVENTのタイムゾーンはVTIMEZONEと一致している必要がありますか?
VTIMEZONEコンポーネントで定義されたタイムゾーンは、iCalendarオブジェクト全体にグローバルスコープを持っています。したがって、VEVENT内のTZIDパラメータは、VTIMEZONEコンポーネントを参照する必要があります(グローバルタイムゾーンIDを除く)。
.2他のタイムゾーンを使用してパート2とパート3の時間を記述できますか?
ICalendarオブジェクトにVTIMEZONEコンポーネントがあるからといって、それを使用する必要があるわけではありません。あなたの例は有効です。