1

正常に動作するiCal4j(1.0.3)APIを使用して.icsファイルを作成するアプリケーションを作成していますが、タイムゾーンに問題が発生しています。ZoneInfoOutlook(1.0.2)ライブラリを追加し、それを使用して.icsファイルを作成しました。ただし、Outlookは標準のタイムゾーンを認識していません。たとえば、これを生成すると、次のようになります。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID=America/New_York:20120808T020000
DTEND;TZID=America/New_York:20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:America/New_York
END:VEVENT
BEGIN:VTIMEZONE
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR  

Outlookはタイムゾーンを認識できません。いくつかの実験の結果、ファイルを少し変更し、America/New_YorkをEasternStandardTimeに変更した後、Outlookがタイムゾーンを完全に読み取ることがわかりました。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="Eastern Standard Time":20120808T020000
DTEND;TZID="Eastern Standard Time":20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:Eastern Standard Time
END:VEVENT
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
X-LIC-LOCATION:Eastern Standard Time
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

この例を判断すると、Outlookはタイムゾーンに非標準のラベルを使用しています。
現在、Microsoft Outlook 2010(14.0.6117.5001)SP1に対してテストしています。

タイムゾーンがMicrosoftOutlookと完全に互換性を持つようにするための、iCal modまたは何らかの回避策を知っている人はいますか?

または、Outlook互換の.icsファイルを作成できる別のAPIですか?

4

4 に答える 4

1

既存のTZIDパラメータを引用するだけで(つまり、「東部標準時」に変更せずに)試しましたか?例えば:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="America/New_York":20120808T020000
DTEND;TZID="America/New_York":20120808T180000
...

ical4jでは、識別子を引用する可能性があります(たとえば、OUTLOOK_COMPATIBILITYヒントが有効になっている場合)が、実際に識別子を暗黙的に変更するのは少し難しいです。

おそらく独自のコードでそれを行うことができますが、つまり、レジストリからタイムゾーンを取得し、基になるVTimeZoneオブジェクトを取得して、TZIDパラメーターを置き換えます(ただし、出力でTZIDを引用するためにical4jの変更が必要になる場合があります)。

于 2012-08-18T05:07:28.360 に答える
0

TZIDパラメータを「引用」することで、ようやく同様の機能を得ることができましたが、作成者が提案したように、OUTLOOK_COMPATIBILITYヒントを有効にしても機能しませんでした。代わりに、これを手動で行う必要がありました。

TzId tzid = new TzId("\"America/Vancouver\"");

もちろん、これは実際の解決策というよりは、ハックのように感じます。多分フォーチュナはこれを機能させるための提案を持っていますか?

于 2012-08-22T00:13:18.450 に答える
0

タイムゾーンはicalendarで暗黙的ではないため、icsファイルでVTIMEZONEコンポーネントを使用して名前を明示的にする必要があります。rfc5545§3.6.5を参照してください。タイムゾーンコンポーネント(タイムゾーンコンポーネント)

于 2012-08-09T07:45:36.237 に答える
0

それは私のために働きます..私がicalを生成しているときはいつでも、私はそれをUTCにデフォルト設定します。Outlookは、内部でicalのUTC時刻をユーザーのタイムゾーンに変換します。サンダーバードやヤフーのカレンダーでも試してみました。

于 2012-09-06T15:03:23.747 に答える