两个NSDate日期与时区之间的天数

时间:2012-09-01 23:10:09

标签: timezone compare nsdate

我计算两个日期之间的天数:

NSDateComponents *datesDiff = [calendar components: NSDayCalendarUnit 
                                          fromDate: someDate
                                            toDate: currentDate
                                           options: 0];

但是这种方法有一个缺点 - 它不考虑时区。 因此,例如,如果我在+ 2GMT且当地时间是凌晨1:00,则当前日期是昨天。

如何比较指定时区的日期(没有'黑客')?

PS:通过计算时差来预防答案,我需要实际天数的差异:

  • yesterday 23:00today 1:00 - 1 day
  • yesterday 1:00today 23:00 - 1 day
  • today 1:00today 23:00 - 0 days

  • (所有这些在当前时区)

2 个答案:

答案 0 :(得分:0)

为什么不将dateformatter配置为默认所有日期为GMT时间,然后进行比较。

    NSDate *now = [NSDate date]; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; // Sets to GMT time. 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setCalendar:gregorianCalendar]; 
    [formatter setTimeZone:timeZone]; 
    [formatter setDateFormat:@"yyyyMMddHH"];

    NSString *dateString = [formatter stringFromDate:now]; 
  // do whatever with the dates
    [gregorianCalendar release]; 
    [formatter release];

答案 1 :(得分:0)

我不知道它是否符合你不是hacky的标准,但是一个相当简单的方法似乎是定义了这样的GMT调整日期:

NSDate *newDate = [oldDate dateByAddingTimeInterval:(-[[NSTimeZone localTimeZone] secondsFromGMT])

有关详细信息,请参阅this question