我有两个字符串来自我的服务器,我在其中存储时间,我需要比较这两者之间的时间间隔,以分钟为单位,如果有必要,则以小时为单位。我应该转换为NSDate
还是使用NSString
?
NSString
看起来像:
NOW 14:22
LAST TIME 10:18
编辑#1 由于每个人都在说我使用NSDate,我将数据库中的数据转换为DATETIME,现在我可以使用以下代码比较两个NSDate:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"]];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
NSDate *currentDateTimeWithOffset = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone localTimeZone] secondsFromGMT]];
NSString *strDate = [dateFormatter stringFromDate:currentDateTimeWithOffset];
NSDate * now = [dateFormatter dateFromString:strDate];
NSDate *date = [dateFormatter dateFromString:@"2013-04-09 12:10:18"];
NSLog(@"Difference %f",[now timeIntervalSinceDate:date]);
结果如下:
Difference 864.000000
NOW 2013-04-09 15:24:42 +0000
LAST DATE 2013-04-09 12:10:18
这是对的吗?差异在于秒?
答案 0 :(得分:4)
如果格式比您显示的格式更复杂,请考虑使用NSDateFormatter。举个简单的例子:
NSArray *hoursMins = [timeString componentsSeparatedByString:@":"];
NSInteger timeInMins = [hoursMins[0] intValue] * 60 + [hoursMins[1] intValue];
然后在几分钟内减去两次。日期格式化程序方法如下所示:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"HH:mm"];
NSDate *date = [df dateFromString:timeString];
您可以使用以下命令获得两个日期之间的秒数差异:
[date timerIntervalSinceDate:anotherDate];
答案 1 :(得分:0)
NSDateFormatter是“干净”的方式。但是如果你正在寻找快速和肮脏的,那些是你得到的实际字符串(包括现在和最后时间),我只需使用特定的NSRange来拉出小时和分钟并比较它们。
确保,虽然您检查了小时数,并且“现在”小时是否在“最后一次”小时之前,您将24添加到现在以投掷当天翻转。
答案 2 :(得分:-1)
仅使用NSString
,NSDateFormatter用于获取NSDate
NSDateFormatter *rfc3339DateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[rfc3339DateFormatter setLocale:enUSPOSIXLocale];
[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// Convert the RFC 3339 date time string to an NSDate.
NSDate *date = [rfc3339DateFormatter dateFromString:rfc3339DateTimeString];
如果您有小时,分钟和秒的单独值,则可以使用NSCalendar
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1965];
[comps setMonth:1];
[comps setDay:6];
[comps setHour:14];
[comps setMinute:10];
[comps setSecond:0];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
一个完美的解决方案是使用时间戳而不是NSString。不仅可以很容易地将时间戳转换为NSDate
(NSDate +dateWithTimeIntervalSinceReferenceDate
),然后在需要时转换为NSString
,但您也可以通过减法获得时差。
使用两个NSDate
个对象时,差异是使用NSDate -timeIntervalSinceDate
计算的。