【问题标题】:Date selected from UIDatePicker is different from the date being saved从 UIDatePicker 中选择的日期与保存的日期不同
【发布时间】:2013-11-10 10:02:03
【问题描述】:

这就是我设置 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

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

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。

【问题讨论】:

标签: ios nsdateformatter uidatepicker nstimezone


【解决方案1】:

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

使用[NSTimeZone timeZoneForSecondsFromGMT:0] 而不是[NSTimeZone localTimeZone]

【讨论】:

  • 我更新了我的问题。抱歉,但实际问题是当我试图获取今天的日期和我保存的日期之间的差异时。
  • 我试过了,但 [dateComponents day] 仍然返回 7 而不是 8
  • 尝试记录两个日期。我想你会看到不同的。
【解决方案2】:

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

问题在于[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];

【讨论】:

  • 给出与我用于日期选择器的代码完全相同的代码以及我保存所选日期的方式,今天是 11 月 10 日晚上 7:28,我保存的日期是 11 月 18 日,这就是我得到了...保存的日期 = 2013-11-17 16:00:00 +0000 今天的日期 = 2013-11-09 16:00:00 +0000 我得到了正确的天数差异,所以我猜以上是正确的对吗?
  • @iPhoneJavaDev:“今天的日期 = 2013-11-09 16:00:00 +0000”是你用我回答的代码计算出来的吗?是的,这看起来是正确的,因为那是您当地时区的“2013-11-10 00:00:00”。
【解决方案3】:
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);

删除本地时区

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多