4

这就是我设置 datePicker 的方式

self.datePicker = [[UIDatePicker alloc] init];
self.datePicker.timeZone = [NSTimeZone localTimeZone];

这就是我保存所选日期的方式

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeZone:[NSTimeZone localTimeZone]];
dateToSave = [formatter dateFromString:self.dateTextField.text];
NSLog(@"date saved = %@", dateToSave);

如果我从日期选择器中选择 Nov 18 2013,则 NSLog 显示

date saved = 2013-11-17 16:00:00 +0000

但是,在我的代码中的某处,我需要获取今天的日期和我在日期选择器中选择的日期之间的天数差异。

NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit fromDate:[NSDate date] toDate:dateSaved options:0];
NSLog(@"number of days => %i", [dateComponents day]);

今天是 11 月 10 日。我保存的日期是 11 月 18 日。但是天数差是 7,而不是 8。

4

3 回答 3

2

您的时区是-8。2013-11-17 16:00:00 +0000等于2013-11-18 00:00:00 -0800

使用[NSTimeZone timeZoneForSecondsFromGMT:0]代替[NSTimeZone localTimeZone]

于 2013-11-10T10:06:58.197 回答
1

(这个答案是指关于计算两个日期之间的天数的更新问题。)

问题是[NSDate date]当前日期+时间,而不是当天的开始。例如,如果

 [NSDate date] = "2013-11-10 10:00:00"
 dateSaved     = "2013-11-18 00:00:00"    (both in your *local* timezone)

那么这两个日期之间的差异是“7天14小时”。因此,您得到7天数。

所以你必须先计算当天的开始时间:

NSDate *startOfDay;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
                                startDate:&startOfDay
                                 interval:NULL
                                  forDate:[NSDate date]];

然后在计算差异时使用它:

NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit
                                           fromDate:startOfDay
                                             toDate:dateSaved
                                            options:0];
于 2013-11-10T10:40:09.553 回答
0
NSDateFormatter *date_form=[[NSDateFormatter alloc]init];

[date_form setDateFormat:@"dd/MM/yyyy"];

NSDate *seletected_date = [datepicker date];

NSString *dateToSave=[[NSString alloc] initWithFormat:@"%@",[date_form stringFromDate:seletected_date]]; 

NSLog(@"date saved = %@", dateToSave);

删除本地时区

于 2013-11-10T10:11:15.163 回答