我计算两个日期之间的天数:
NSDateComponents *datesDiff = [calendar components: NSDayCalendarUnit
fromDate: someDate
toDate: currentDate
options: 0];
但是这种方法有一个缺点 - 它不考虑时区。 因此,例如,如果我在+ 2GMT且当地时间是凌晨1:00,则当前日期是昨天。
如何比较指定时区的日期(没有'黑客')?
PS:通过计算时差来预防答案,我需要实际天数的差异:
yesterday 23:00
与today 1:00
- 1 day
yesterday 1:00
与today 23:00
- 1 day
today 1:00
与today 23:00
- 0 days
(所有这些在当前时区)
答案 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。