2011-09-15 33 views
11

我最近遇到了一個我在電子郵件中收到的ICS文件的問題。我的Outlook 2010副本無法正確識別時區。這裏是一個會議的開始時間在ICS文件表示方式:ICS文件中是否存在缺少Olsen TZ TZID格式的解決方法

DTSTART;TZID=America/Los_Angeles:20110928T183000 

當Outlook導入此文件時,它改變了時間從下午6:30太平洋時間下午7:30(太平洋時間)。一些實驗後,我能得到的是正確導入在Outlook中更改時區格式的ICS文件:

DTSTART;TZID="Pacific Time":20110928T183000 

經過進一步研究,我發現,ICS file specification離開的時區識別的問題開放,但建議使用the Olsen TZ database。看來,Microsoft Outlook團隊已選擇忽略此建議。

鑑於Outlook是一個相當流行的日曆客戶端,有沒有一種可靠的方式來格式化ICS時區的Outlook仍與其他客戶端兼容?我最關心的這個問題是Outlook導入期間的無提示錯誤。用戶可以在錯誤的時間輕鬆地出席會議,因爲Outlook不會提示它對時區感到困惑。我們應該簡單地將Outlook用戶指向不同的文件格式嗎?

注意:我知道這個問題類似於an earlier post,但該帖子的引用似乎已過期,我想知道是否有更好的解決方案。

+0

http://stackoverflow.com/questions/3763503/writing-ics-files-for-multiple-clients-including-google中的鏈接現在是http://icalevents.com/category/notes/ 。與你的問題相關的最有趣的帖子似乎是http://icalevents.com/2613-what-every-developer-ought-to-know-about-timezones-wrt-calendar-files/ - 但它只是談論解析ics文件(以及不同的tz id),而不是將它們發送給多個客戶端時要做什麼。 Hrmmpf。 –

回答

5

如果沒有完整的iCalendar文件很難判斷,但是您是否定義了日曆文件中的VTIMEZONE組件,該組件定義了America/Los_Angeles應該是什麼?

喜歡的東西:

BEGIN:VTIMEZONE 
TZID: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 
+0

Egads!這工作!注意:確保在關閉END:VCALENDAR標記之前獲取VTIMEZONE定義。謝謝@oberron! –

1

,而不是添加時區定義到ICS文件,倒不如說事件開始/結束時間在UTC本身。 然後,在你的情況下,ICS文件的使用者 - 應該能夠在UTC(從ics文件)到最終用戶的首選時區設置之間進行時區轉換,就在他們的日曆上呈現會議事件之前。

優點: 這種方式你不必照顧自己添加正確的時區偏移量(VTIMEZONE組件)。 另外,ics文件更小,更乾淨,易於閱讀。

參考文獻: 即使谷歌似乎是在處理芯片這種方式本身的時區 - Google timezone handling

希望這有助於。

+1

**缺點**:不能正確處理目標時區的夏令時更改。 – Geoff

相關問題