这是使用NSDateComponents向NSDate添加天数的正确方法吗?

时间:2012-02-17 11:35:31

标签: ios 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; }

案例1:

2012-02-17 06:28:14.474申请[2906:707]开始日期:2012-03-08 11:26:23 +0000结束日期2012-03-09 11:26:23 +0000数量第1天

案例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小时。这可能是什么问题? 是否有人遇到过这个问题?

1 个答案:

答案 0 :(得分:2)

这是因为夏令时 - 美国夏令时从3月11日开始。

编辑:

您可以通过将输入的日期转换为日期组件对象,更改日期组件(时间不受影响)然后转换回NSDate来解决此问题。