2011-08-29 70 views
1

與自定義時區一起使用時,EKEventEditViewController出現了一個奇怪的問題。它在兩種情況下表現不同:EKEventEditViewController時區問題

情況1 - 工作正常

  • 啓動應用
  • 創建EKEventEditViewController用的startDate = [NSDate的日期]
  • 新事件的開端是添加新的事件正確顯示(當前時間)
  • 使用[NSTimeZone setDefaultTimeZone:otherTimeZone]更改默認時區
  • 創建EKE ventEditViewController用的startDate = [NSDate的日期]
  • 新事件開始顯示正確添加新的事件(當前時間調整時區)

情況2 - 意外行爲

  • 啓動應用程序
  • 使用[NSTimeZone setDefaultTimeZone:otherTimeZone]更改默認時區
  • 創建EKEventEditViewController以使用startDat添加新事件E = [NSDate的日期]被不正確地顯示
  • 新事件開始時(系統時區偏移+默認時區偏移)
  • 更改默認時區回到系統時區[NSTimeZone setDefaultTimeZone:[NSTimeZone systemTimeZone]]
  • 創建EKEventEditViewController添加用的startDate = [NSDate的日期]
  • 新事件開始新的事件仍然顯示不正確(系統區偏移+默認時區偏移)

我的猜測該EKEventEditViewController的第一顯示器上它在某種程度上緩存默認timezon e然後將其用作抵消。

有沒有人遇到過類似的問題?這是一個錯誤還是我錯過了什麼?

+0

此外,剛剛注意到EventKit在設置自定義時區[NSTimeZone setDefaultTimeZone:otherTimeZone]後表現異常。例如,「開始」字段中的時間與UIDatePicker中顯示的時間不同。 – Laurynas

回答

0

我有完全相同的問題。我使用偏移量(單獨)在GMT時區中將所有日期存儲在數據庫中。我的應用程序從正在運行的開始(GMT)開始使用自定義timeZone。當我想在將日曆導出到日曆時使用這些日期時,我看到錯誤的開始日期和結束日期。幫助我解決問題的方法是首先使用以下轉換器方法將我存儲在數據庫中的日期轉換爲系統時區(參見下文)。傳遞給EKEventEditViewController的這個轉換日期正確地顯示了日期。希望它也能解決你的問題。

+ (NSDate *) convertToSystemTimeZone:(NSDate*)sourceDate { 
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 
NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease];   
return destinationDate; }