1

カスタムタイムゾーンで使用する場合、EKEventEditViewController に奇妙な問題があります。次の 2 つの状況では、動作が異なります。

状況 1 -正常に動作します:

  • アプリを起動
  • EKEventEditViewController を作成して、startDate = [NSDate date] で新しいイベントを追加します
  • 新しいイベントの開始は正しく表示されます(現在の時刻)
  • [NSTimeZone setDefaultTimeZone:otherTimeZone] でデフォルトのタイムゾーンを変更します
  • EKEventEditViewController を作成して、startDate = [NSDate date] で新しいイベントを追加します
  • 新しいイベントの開始が正しく表示されます (タイム ゾーンに調整された現在の時刻)

状況 2 -予期しない動作:

  • アプリを起動
  • [NSTimeZone setDefaultTimeZone:otherTimeZone] でデフォルトのタイムゾーンを変更します
  • EKEventEditViewController を作成して、startDate = [NSDate date] で新しいイベントを追加します
  • 新しいイベントの開始が正しく表示されない (システムのタイムゾーン オフセット + デフォルトのタイムゾーン オフセット)
  • デフォルトのタイムゾーンをシステムのタイムゾーンに戻します [NSTimeZone setDefaultTimeZone:[NSTimeZone systemTimeZone]]
  • EKEventEditViewController を作成して、startDate = [NSDate date] で新しいイベントを追加します
  • 新しいイベントの開始が正しく表示されない (システムのタイムゾーン オフセット + デフォルトのタイムゾーン オフセット)

EKEventEditViewController の最初の表示で、デフォルトのタイムゾーンを何らかの形でキャッシュし、それをオフセットとして使用すると思います。

誰かが同様の問題に直面しましたか?これはバグですか、それとも何か不足していますか?

4

1 に答える 1

0

私はまったく同じ問題を抱えていました。データベースのすべての日付をオフセット付きで GMT timeZone に (個別に) 格納していました。私のアプリは、実行されている最初からカスタム timeZone を使用しています (GMT)。イベントをカレンダーにエクスポートする際にこれらの日付を使用したい場合、間違った開始日と終了日が表示されていました。問題の解決に役立ったのは、最初に、データベースに保存した日付を、次のコンバーター メソッドを使用してシステムのタイム ゾーンに変換することでした (以下を参照)。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; }
于 2012-01-05T10:51:35.380 に答える