2011-07-13 8 views
1

PHP/Zend FrameworkベースのカレンダーアプリケーションのイベントからiCalendarファイルを作成しています。私は日付/時刻をUTCに変換して、タイムゾーンを指定することを避けています。ワンタイムイベントをインポートすると、OutlookはUTC時刻を正しく解釈し、ローカルタイムゾーン(東部時間(US &カナダ))で表示します。定期的なイベントをインポートすると、Outlookは日付/時刻がUTCであるという事実を無視し、それを "floating"として扱います。Outlook iCalendarのUTC日付/時刻を繰り返しイベントとしてフローティングとして処理する

これは輸入適切にすることを1回限りのイベントです:

BEGIN:VCALENDAR 
PRODID:My Calendar Application 
VERSION:2.0 
METHOD:PUBLISH 
BEGIN:VEVENT 
UID:[email protected] 
DTSTAMP:20110713T143920Z 
DTSTART:20110713T110000Z 
DTEND:20110713T120000Z 
SUMMARY:iCalendar Breakfast 
DESCRIPTION:Eat more breakfast! 
CATEGORIES:Meals 
END:VEVENT 
END:VCALENDAR 

これが正常にインポートされません定期的なイベントである:

BEGIN:VCALENDAR 
PRODID:My Calendar Application 
VERSION:2.0 
METHOD:PUBLISH 
BEGIN:VEVENT 
UID:[email protected] 
DTSTAMP:20110713T142549Z 
DTSTART:20110711T220000Z 
DTEND:20110711T230000Z 
SUMMARY:iCalendar Dinner 
DESCRIPTION:This maps to the iCalendar DESCRIPTION field. 
CATEGORIES:Meals 
RRULE:FREQ=DAILY;UNTIL=20110715T230000Z;INTERVAL=1 
END:VEVENT 
END:VCALENDAR 

時間は東部のために午後6時から午後7時まででなければなりません時間(US &カナダ)ですが、Outlookでは午後10時から午後11時までに表示されます。

答えて

3

IはiCalendarの仕様を読んでいた、そして見出さthis little paragraph:iCalendarオブジェクト内で指定

"DTSTART" と "DTEND" プロパティペア又は "DTSTART" および "DURATION" 性対は、定義最初に 再発のインスタンス。繰り返しルールで使用する場合は、 "DTSTART"と "DTEND"プロパティの を適切に指定する必要があります。適切な "VTIMEZONE"カレンダーコンポーネントのセットは でなければなりません。 「VTIMEZONE」カレンダー コンポーネントの使用方法の詳細については、「VTIMEZONE」カレンダーコンポーネントの定義を参照してください。

私はこのようなdate_default_timezone_get()を使用することができました:

$data[] = 'DTSTART;TZID=' . date_default_timezone_get() 
     . ':' . $date_start; 

は、単純にその変更が問題を修正しましたが、私は「VTIMEZONEを生成する方法を知らないので、私のicsファイルはiCalendar形式に準拠していない作り"date_default_timezone_get()の値に基づくカレンダーコンポーネント。

0

ZサフィックスはUTCタイムゾーンを意味し、DTSTARTとDTENDについて

を '浮動' ではない、Zをオフにしておきます。厳密に言えば、カレンダーアプリは独自のタイムゾーンを使用して読み込む必要があります。

フローティングイベントは、あなたの例によると、「朝食を食べる」のような個人的な事柄に対してのみ、密接に意味があります。異なるタイムゾーンの人が共有/表示できるイベントに使用されることはありません。明らかに一致しないためです。

http://tools.ietf.org/html/rfc5545

から現地時間形式で日付が単に がUTCの指示が含まれていません。また、時間 ゾーンを参照しないことDATE-TIME値です。例えば、以下は 11 PMで、1998年1月18日を表します。Outlookの行動が私を混乱させた理由

19980118T230000 

    DATE-TIME values of this type are said to be "floating" and are 
    not bound to any time zone in particular. They are used to 
    represent the same hour, minute, and second value regardless of 
    which time zone is currently being observed. For example, an 
    event can be defined that indicates that an individual will be 
    busy from 11:00 AM to 1:00 PM every day, no matter which time zone 
    the person is in. 
+0

はい、それはです。私はUTCで日付を指定していましたが、現地時間として扱われていました。私はそれが浮いていることを望んでいませんでした。 – Sonny

関連する問題