0

以下の方法を使用して、NSDate から日数を加算または減算しています。

値をログに記録すると、時々予期しない結果が得られます。

以下はそのケースの 1 つです。

//This adds X days to the current Date and returns to the user
+(NSDate*)getRelativeDateInDays:(NSInteger)days forDate:(NSDate*)date{


    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents = [[NSDateComponents alloc] init];
    [weekdayComponents setDay:days];
    NSDate *newDate = [gregorian dateByAddingComponents:weekdayComponents toDate:date options:0];
    [gregorian release];
    [weekdayComponents release];
    NSLog(@"start Date : %@ End Date %@",date,newDate);

newDate を返します。}

ケース 1:

2012-02-17 06:28:14.474 Application[2906:707] start Date : 2012-03-08 11:26:23 +0000 End Date 2012-03-09 11:26:23 +0000 日数 1

ケース 2:

2012-02-17 06:29:00.631 Application[2906:707] start Date : 2012-03-10 11:26:23 +0000 End Date 2012-03-11 10:26:23 +0000 日数 1

ケース 1 では、2012-03-08 11:26:23 +0000 に 1 日追加すると、2012-03-09 11:26:23 +0000 になります。

しかし、2012-03-10 11:26:23 +0000 に 1 日追加すると、2012-03-11 10:26:23 +0000 になります。

さらに1時間短縮。ここで何が問題になる可能性がありますか?この問題に直面した人はいますか?

4

1 に答える 1

2

これは夏時間のためです。米国の夏時間は 3 月 11 日に始まります。

編集:

入力された日付を日付コンポーネント オブジェクトに変換し、日付コンポーネントを変更して (時間は影響を受けません)、元の に変換することで解決できますNSDate

于 2012-02-17T11:42:59.773 に答える