web-dev-qa-db-ja.com

Google、Outlook、Appleで効率的に機能するicsファイルでタイムゾーンを指定する方法

Google、Outlook、Appleカレンダーと互換性のあるicsファイルを生成したいのですが、うまく実行できますが、ファイルにタイムゾーンブロックを指定できないという問題があります上記のアプリと互換性があります。私は現在、Outlookでは機能せず、googleで異なる時間を与えるX-Wr-timezoneプロパティを使用しています。この問題の解決策が必要です。私のicsファイル:

BEGIN:VCALENDA
RPRODID:-//sample//sam Calendar//EN
VERSION:2.0
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20160206T074400
DTEND;TZID=America/Los_Angeles:20160206T084400
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
LOCATION: Pune
SEQUENCE:0
PRIORITY:5
STATUS:CONFIRMED
SUMMARY:Appointment Details:- John Bond
UID:X:201600U2800000A9Yp0EAF@sample
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
10
koustubh

vEVENTの前にVTIMEZONEコンポーネントを使用します: https://tools.ietf.org/html/rfc5545#section-3.6.5

   BEGIN:VTIMEZONE
   TZID:America/New_York
   LAST-MODIFIED:20050809T050000Z
   BEGIN:STANDARD
   DTSTART:20071104T020000
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   TZNAME:EST
   END:STANDARD
   BEGIN:DAYLIGHT
   DTSTART:20070311T020000
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   TZNAME:EDT
   END:DAYLIGHT
   END:VTIMEZONE

したがって、最終的に組み立てられたICSファイルは次のようになります(OPのICSファイルに基づいて、NBの1行目のNBにVCALENDARの "R"が2行目の「PRODID」の始まり。答えで修正しました):

BEGIN:VCALENDAR
PRODID:-//sample//sam Calendar//EN
VERSION:2.0
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
LAST-MODIFIED:20050809T050000Z
BEGIN:STANDARD
DTSTART:20071104T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20070311T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20160206T074400
DTEND:20160206T084400
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
LOCATION: Pune
SEQUENCE:0
PRIORITY:5
STATUS:CONFIRMED
SUMMARY:Appointment Details:- John Bond
UID:X:201600U2800000A9Yp0EAF@sample
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

この特定のICSはテストしていないため、VTIMEZONEとX-WR-TIMEZONEの両方を使用した場合の動作を予測できません。

もう1つの微妙な点は、日付/時刻形式にタイムゾーンを含めることができないことです。たとえば、これをPHPでビルドする場合、次のことを確認する必要があります。

const DT_FORMAT = 'Ymd\THis';

例えばDTSTART:20160206T074400

そして[〜#〜]ない[〜#〜]

const DT_FORMAT = 'Ymd\THis\Z';

例えばDTSTART:20160206T074400Z

この日付/時刻形式は、VEVENTブロックの日付/時刻にとって重要です。 「LAST_MODIFIED」フィールドの最後に「Z」があると成功しました。

余談ですが、OPはロサンゼルスのタイムゾーンで機能していましたが、この回答はVTIMEZONEブロックにニューヨークの情報を示しています。ロサンゼルスの適切な情報を計算する必要があります(夏時間のオフセットなど)。

最後の観察、2018年4月の時点で、新しい行「\ n」はGoogleカレンダーでは機能しません。「VERSION:2.0」が使用されている限り、iCalはそれに従います。

11
luc

質問者がロサンゼルスに住んでいて、最新のUS-ENバージョンのOutlookを使用しているとします。ニューヨークでタイムゾーンを指定する理由がわかりません。 ロスアングルはPDTまたはPSTタイムゾーンです(日本語で作成) icsファイルでタイムゾーンを指定する方法の重要なポイントを見つけ、5つのアイテムに同じ値を設定します

  1. X-WR-TIMEZONE:America/Los_Angeles
  2. TZID:America/Los_Angeles
  3. X-LIC-LOCATION:America/Los_Angeles
  4. DTSTART;TZID="America/Los_Angeles"
  5. DTEND;TZID="America/Los_Angeles"

このサイトによると 夏時間(夏時間-DST)は定期的です。したがって、RRULE a.k.a Rcurrentルールを追加する必要があります。もちろん、以前のコードはうまくいきます。それでも、2019年9月にNew Line\n(キャリッジリターンまたはラインフィードを意味する)がAndoroidスマートフォンのGoogleカレンダーで引き続き有効です。そして次のアイテムはそれほど必要ではありません

  • UID:
  • SEQUENCE:0使用前に、スケジューラで追加されたアイテムを削除します。

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 19.0 MIMEDIR//EN
VERSION:2.0
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Appointment
LOCATION:Pune
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
DTSTART;TZID="America/Los_Angeles":20160206T074400
DTEND;TZID="America/Los_Angeles":20160206T084400
PRIORITY:5
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
0
overopenedll