2012-09-01 30 views
1

排名第二的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

  • (這一切在當前時區)

+0

爲什麼不把它們都轉換成時代,然後弄清楚它有多少天了? –

+0

你究竟是什麼意思? – brigadir

+0

我的想法是,如果你確定每個日期以來的秒數,然後找出兩者之間的差異,你可以通過除以一天中的秒數(86,400)來找到天數。但是,有可能有更好的方法來做到這一點 - 你讀了[文檔](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference的.html#// apple_ref/DOC/UID/20000188-SW6)? –

回答

0

我不知道它是否符合不被哈克你的標準,而是一個相當簡單的方式似乎定義GMT調整日期是這樣的:

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

更多見this question細節。

+0

這應該工作。謝謝。 – brigadir

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]; 
+0

在GMT時區,例如21:00和23:00有0天的差異,但在GMT + 2(用戶居住的地方)有1天。 – brigadir