奇怪的日期结果在给定日期增加1个月

时间:2014-02-18 01:59:36

标签: ios nsdate nsdatecomponents

我正在使用以下代码来获取给定日期上午12:00的下周日期:

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit |NSHourCalendarUnit fromDate:now];
[components setHour:0];
NSDate *todayDate = [calendar dateFromComponents:components];


int daysToAdd = 7;
NSDate *tomorrowDate = [todayDate dateByAddingTimeInterval:60*60*24*daysToAdd];


NSString *stringDate = [NSString stringWithFormat:@"%@",tomorrowDate];
todoItemDueDateText.text = stringDate;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"EEEE, dd MMMM YYYY"];
NSString *fechasimulada = [dateFormatter stringFromDate:tomorrowDate];
dateFieldSimulatedText.text = fechasimulada;

如果我记录结果日期,它可以正常工作。

现在,类似的一段代码可以在下个月的某个特定日期上午12:00开始:

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
[components setHour:0];
NSDate *todayDate = [calendar dateFromComponents:components];


//NSDate *today = [NSDate date];
NSDateComponents* dateComponents = [[NSDateComponents alloc]init];
[dateComponents setMonth:1];
//NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* tomorrowDate = [calendar dateByAddingComponents:dateComponents toDate:todayDate options:0];


NSString *stringDate = [NSString stringWithFormat:@"%@",tomorrowDate];
todoItemDueDateText.text = stringDate;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"EEEE, dd MMMM YYYY"];
NSString *fechasimulada = [dateFormatter stringFromDate:tomorrowDate];

我不知道为什么,但第二段代码给出了预期的日期,但是-1小时。

更新:

我会告诉你日期:

来源日期(今天上午12:00)+7小时

enter image description here

下一个给定日期的下一个日期:

enter image description here

下个月从上一个给定日期开始的日期:

enter image description here

1 个答案:

答案 0 :(得分:1)

NSDate考虑夏令时。如果您跨越DST日,您将遇到此问题。