这是我设置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);
如果我从日期选择器中选择2013年11月18日,则NSLog显示
date saved = 2013-11-17 16:00:00 +0000
但是,在我的代码的某处,我需要在今天的日期和我在datepicker中选择的日期之间的天数中获得差异。
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。
答案 0 :(得分:1)
您所在的时区是-8。 2013-11-17 16:00:00 +0000
等于2013-11-18 00:00:00 -0800
。
使用[NSTimeZone timeZoneForSecondsFromGMT:0]
代替[NSTimeZone localTimeZone]
答案 1 :(得分: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];
答案 2 :(得分: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);
删除localtimezone