35

休日をOutlook2007にインポートし、終日イベントフラグを設定するために、ASP.NETを使用してicsファイルを作成しています。これは複数日の休日では問題なく機能しますが、1日は登録されていないようで、深夜から深夜まで「特異な休日」が予約されます。

MSDNによると、これを行うには、開始時刻と終了時刻を00:00に設定するだけで十分です。X-MICROSOFT-CDO-ALLDAYEVENTフラグとX-MICROSOFT-MSNCALENDAR-ALLDAYEVENTフラグも使用してみましたが、効果がないようです。

誰かが私がどこで間違っているのか見ることができますか?以下にサンプル出力を含めました。

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:HOLIDAY\n
DTEND;VALUE=DATE:20090727
DTSTAMP:20091111T000000Z
DTSTART;VALUE=DATE:20090727
LAST-MODIFIED:20091111T000000Z
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-gb:HOLIDAY
TRANSP:OPAQUE
X-ALT-DESC;FMTTYPE=text/html:HOLIDAY
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-CONFTYPE:0
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
END:VEVENT
END:VCALENDAR
4

8 に答える 8

54

@IceCoolは正しいです-単にを省略するだけDTENDでは十分ではありません...それが機能するDTSTARTかどうかのデータ型によって異なります。

仕様によると、データ型DTSTARTがあり、DATEデータ型がないDTEND場合、イベントは開始日の終わりに終了します。ただしDTSTART、完全なDATE-TIMEデータ型があり、ない場合はDTEND、開始と同時に終了します。

これはRFC5545のセクション3.6.1(https://www.rfc-editor.org/rfc/rfc5545#page-54)にあります。

「VEVENT」カレンダコンポーネントがDATE値タイプの「DTSTART」プロパティを指定しているが「DTEND」または「DURATION」プロパティを指定していない場合、イベントの期間は1日と見なされます。「VEVENT」カレンダーコンポーネントがDATE-TIME値タイプの「DTSTART」プロパティを指定しているが「DTEND」プロパティを指定していない場合、イベントは「DTSTART」プロパティで指定された同じカレンダー日時に終了します。

したがって、結果として、終日のイベントを取得するには、これだけでは不十分です。

DTSTART:20100101T000000

データ型がであるため機能しませんDATE-TIME。したがって、イベントの終了は開始と同じです。終日のイベントを作成するには、明示的なDTEND(これもタイプのDATE-TIME)を追加する必要があります。

DTSTART:20100101T000000
DTEND:20100102T000000

またはデータ型を使用すると、 :DATEは必要ありません。DTEND

DTSTART;VALUE=DATE:20100101
于 2015-05-14T23:18:50.117 に答える
29

上記のコメントRE:翌日の真夜中はAppleのiCalではうまくいきませんでした。これを回避するために、BEGIN:VEVENTセクションのそれぞれで、次のように日付を出力しました。

DTSTART;VALUE=DATE:20100101
DTEND;VALUE=DATE:20100101

まだMicrosoftタグが必要かどうかはわかりませんが?!

于 2010-09-08T17:01:08.543 に答える
4

答えが見つかりました。終日のイベントを行うには、翌日の深夜に予約を終了する必要があります。

于 2009-11-12T08:30:06.260 に答える
3

これを他の人のためにここに置いておきますグーグル..私は同じ、特にGoogleカレンダーでの終日のイベントと半日の組み合わせで問題を抱えていました。

私の問題は、ICSファイルが強制的にダウンロードされる方法に関連していました。ばかげているように聞こえますが、ダウンロードを強制するヘッダーにより、Googleカレンダーが終日のイベントを適切に解析できませんでした。ブラウザへのストリーミングの方が良い結果が得られました。ここに出力例があります。(VALUE = DATEを使用)単一の終日イベントの場合。

BEGIN:VEVENT
UID:1248
DTSTART;VALUE=DATE:20151218
DTEND;VALUE=DATE:20151219
DTSTAMP:20151218T080000Z
CREATED:20151212T200409Z
DESCRIPTION:examplea
LAST-MODIFIED:20151218T080000Z
LOCATION:
SUMMARY:example summary
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
UID:1249
DTSTART;VALUE=DATE:20151217
DTEND;VALUE=DATE:20151218
DTSTAMP:20151217T080000Z
CREATED:20151212T200409Z
DESCRIPTION:example1
LAST-MODIFIED:20151217T080000Z
LOCATION:
SUMMARY:Example
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
于 2015-12-12T20:06:03.477 に答える
2

anmariの答えは、カレンダーとOutlook365の両方の現在のバージョンで最も正確であるように見えます。開始と終了が同じである場合、それは深夜の予定としてカレンダーに入り、開始の前日に終了する終日の予定としてOutlook365に入ります。両方で機能する唯一の方法は、終了日を開始日より1日遅くすることです。さらに、DTSTAMPを含めず、DTSTARTとDTENDを日付時刻形式ではなく日付形式で配置します。

于 2019-02-13T15:11:58.450 に答える
2

日付のフォーマット方法を変更しただけで、うまくいきました。

例えば。私はこれを持っていました:

DTSTART: " . date(ICAL_FORMAT, strtotime($event->date)) . "
DTEND:" . date(ICAL_FORMAT, strtotime($event->date)) . "

変更:

DTSTART:" . date('Ymd', strtotime($event->date)) . "
DTSTAMP:" . date('Ymd', strtotime($event->created_at)) . "
于 2019-06-02T09:16:35.260 に答える
0

MSDNについてはよくわかりませんが、最新のical仕様によると、1日の終日イベントは1日で始まり、次の日に終わります(1日の終わりのように聞こえる深夜ではありませんが、00:00、つまり日、私が思うに似ている)

最新の仕様RFC5545では、終了日がないか、終了=開始である場合、それはちょっと記念日であり、終日のイベントではありません。

icsファイルを他の場所で使用したり、さらに伝播したりする場合は、これを正しく行うことを試みる価値があります。

ここでこれに関するメモ:http://icalevents.com/1778-all-day-events-adding-a-day-or-not/

于 2010-09-22T06:58:52.363 に答える
-2

私はパーティーに非常に遅れていることを知っていますが、元のRFCによると、終日のイベントはDTENDのないDTSTARTによって指定されています。これは、Outlook2007とGoogleで機能します。

于 2014-05-07T13:04:59.653 に答える