0

CalCalendarの終日のイベントでTimeZoneの問題が発生しました。

- (BOOL)setDayType:(NSString *)type 
            forDay:(NSDate *)date;
{
    NSError *err = nil;
    CalEvent *e = [CalEvent event];
    [e setTitle:type];
    [e setIsAllDay:YES];
    [e setStartDate:date];
    [e setEndDate:[date dateByAddingTimeInterval:1]];
    [e setCalendar:[self calendar]];
    if ( ![[CalCalendarStore defaultCalendarStore] saveEvent:e span:CalSpanThisEvent error:&err] )
    {
...

日付を2012年1月2日00:00:00に設定したとします。私はGMT+2にいるので、タイムゾーン+0200です。私の日付オブジェクトは、このNSLog出力に従って、GMTで1-1-2012、22:00:00を報告します。

"Set daytype ptd on 2012-01-01 22:00:00 +0000"

そして1月1日でも終日生成!!

すべてのタイムゾーンで、終日のイベントを正しい日に設定したことを確認するにはどうすればよいですか?簡単に3時間を追加できますが、それは世界中では機能しません。

4

1 に答える 1

1

date現在のタイムゾーンの正しい日にある 限り、そのまま使用できます。

表示される「問題」は、保存された日付をNSLog(またはデバッガー)を介して印刷すると、現在のタイムゾーンがわからない ため、常にGMT時刻が表示されるために発生します。NSDate

ただし、dateは特定の時点であるため、(日付フォーマッターを使用して)ユーザー用にフォーマットすると、タイムゾーンに関係なく、一貫性が保たれている限り、正しい日付と時刻が表示されます。

あなたが言及したように時間を加算/減算することを心配する必要がある唯一の状況は、複数のタイムゾーンにわたって同じ日付である時点が必要な場合です。

編集:
iCalはすべてを保存するためにGMT時間を使用しているように見えるので、GMTタイムゾーンで日付を作成する必要があります。これについてサポートが必要な場合は、コードを作成した場所に投稿してくださいNSDate。正しい方向を示します。

于 2012-06-04T02:47:48.047 に答える