两个日期之间的差异怎么可能是错误的(2013-04-04T19:14:58 + 02:00-2013-04-03T18:14:58 + 02:00)?
代码的结果是
01天06小时46分02秒
结果是完全错误的,正确的答案应该是
01天01小时00分00秒
你能帮助我找出问题的根源吗?
守则:
-(void)startTimer {
timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];
}
-(void) updateCountdown
{
NSDate *expirydate = [MSharedFunctions SqldateStringTodate:@"2013-04-04T19:14:58+02:00"];
NSDate *now = [MSharedFunctions SqldateStringTodate:@"2013-04-03T18:14:58+02:00"];
if ([expirydate isEarlierThanDate:[MSharedFunctions SqldateStringTodate:[MSharedFunctions SqldateStringTodateNow]]]) {
//Fire end counter
//[[NSNotificationCenter defaultCenter] postNotificationName:@"TIMER" object:nil];
}
//NSDate *dateFromString = [[NSDate alloc] init];
NSDate *dateFromString =expirydate;
//NSLog(@"now %@: endtime :%@ ",[MSharedFunctions SqldateStringTodateNow],@"2013-04-03T18:14:58+02:00");
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *componentsHours = [calendar components:NSHourCalendarUnit fromDate:now];
NSDateComponents *componentMint = [calendar components:NSMinuteCalendarUnit fromDate:now];
NSDateComponents *componentSec = [calendar components:NSSecondCalendarUnit fromDate:now];
NSDateComponents *componentsDaysDiff = [calendar components:NSDayCalendarUnit
fromDate:now
toDate:dateFromString
options:0];
NSLog(@"%@",[NSString stringWithFormat:@"%02d",componentsDaysDiff.day]);
NSLog(@"%@",[NSString stringWithFormat:@"%02d",(24-componentsHours.hour)]);
NSLog(@"%@",[NSString stringWithFormat:@"%02d",(60-componentMint.minute)]);
NSLog(@"%@",[NSString stringWithFormat:@"%02d",(60-componentSec.second)]);
}
SqldateStringTodate功能:
+(NSDate*)SqldateStringTodate:(NSString*) stringdate {
stringdate = [stringdate stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([stringdate length] - 5,5)];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
NSLocale* formatterLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] ;
[dateFormatter setLocale:formatterLocale];
if (stringdate.length==24) {
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
}
else {
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
}
//DebugLog(@"New Date %@",stringdate);
NSDate *getDate = [dateFormatter dateFromString:stringdate];
return getDate;
}
答案 0 :(得分:4)
我无法理解你的逻辑,但如果你想以你想要的方式得到NSDateComponents
的差异,你可以使用:
NSUInteger unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *componentsDaysDiff = [calendar components:unitFlags
fromDate:now
toDate:dateFromString
options:0];
NSLog("%@", componentsDayDiff);
产量结果如下:
<NSDateComponents: 0x75939f0>
Leap month: no
Day: 1
Hour: 1
Minute: 0
Second: 0
那么......又怎么了?
答案 1 :(得分:1)
要使用timeIntervalSinceDate:
来区分两个NSDate对象。然后,要计算天数,小时数,分钟数和秒数,请使用模数除法。
NSTimeInterval doubleDiff = [date1 timeIntervalSinceDate:date2];
long diff = (long) doubleDiff;
int seconds = diff % 60;
diff = diff / 60;
int minutes = diff % 60;
diff = diff / 60;
int hours = diff % 24;
int days = diff / 24;
您可以捏造从NSTimeInterval(双倍)转换为多种不同的转换方式,具体取决于您是要向上舍入,向下舍入还是向最近舍入。