2012-02-17 57 views
0

我正在使用下面的方法來添加或減去NSDate中的天數。這是使用NSDateComponents將日期添加到NSDate的正確方法嗎?

當我記錄這些值時,我有時會得到意想不到的結果。

這裏是殼體的一個:

//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; }

CASE 1:

2012-02-17 06:28:14.474的應用[2906:707]開始日期:2012-03-08 11點26分23秒0000結束日期2012- 03-09十一點26分23秒0000天數1的

CASE 2:

2012-02-17 06:29:00.631的應用[2906:707]開始日期:2012-03- 10 11:26:23 +0000結束日期2012-03-11 10:26:23 +0000天數1

在案例1中,當我在2012-03-08 11:26:23 +0000添加單日時,我得到2012-03-09 11:26:23 +0000。

但是當我添加單日到2012-03-10 11:26:23 +0000我得到2012-03-11 10:26:23 +0000。

1小時額外減少。這裏有什麼問題? 有沒有人遇到過這個問題?

回答

2

這是因爲夏令時 - 美國夏令時開始於3月11日。

編輯:

可以通過將輸入的數據轉換成組件對象生成日期解決它,更改日組分(時間不受影響),然後轉換回爲NSDate

相關問題