我找到了計算兩個日期之間的日差的代碼here。
我寫一個方法:獲取特定時區中兩個NSDate日期之間的天數
-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate
{
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger startDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:startDate];
NSInteger endDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:endDate];
return endDay-startDay;
}
這個方法有一個問題:它可以不考慮該時區的事情。即使我添加一行:
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
我的測試代碼是這樣的:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *strDate = @"2012-09-03 23:00:00";
NSDate *dateStart = [dateFormat dateFromString:strDate];
strDate = @"2012-09-04 01:00:00";
NSDate *dateEnd = [dateFormat dateFromString:strDate];
NSLog(@"Days difference between %@ and %@ is: %d days",[dateFormat stringFromDate:dateStart],[dateFormat stringFromDate:dateEnd],[self daysWithinEraFromDate:dateStart toDate:dateEnd]);
結果是:2012-09-03 23:00
天差:00和2012年9月4日01:00:00是:0天
我想midnig數量拿到1一天的結果這兩個日期之間的時間。我的時區是格林威治標準時間+8。但是這個計算是基於GMT的,所以我得到了錯誤的天數。無論如何要解決這個問題嗎?謝謝。
Scott Lemmon的方法可以解決我的問題。我重寫我的代碼是這樣的:
-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate
{
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
NSDate *newDate1 = [startDate dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]];
NSDate *newDate2 = [endDate dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]];
NSInteger startDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:newDate1];
NSInteger endDay=[gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:newDate2];
return endDay-startDay;
}
嗨,謝謝你的回答。我只是想着無視時間信息。我在我的代碼中完成了這項工作。但你的第一個解決方案非常棒!我認爲這是解決這個問題的更精確的方法。我已經在我的代碼中嘗試過了,我會向他們展示它們。 – Vigor