1

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

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

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

4

2 回答 2

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];
于 2012-09-10T20:34:32.593 回答
0

我不知道它是否符合您不老套的标准,但一种相当简单的方法似乎是定义一个 GMT 调整日期,如下所示:

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

有关更多详细信息,请参阅此问题

于 2012-09-11T05:46:36.397 回答