0

我有两个来自存储时间的服务器的字符串,我需要比较这两个字符串之间的时间间隔,以分钟为单位,如果有必要,以小时为单位。我应该转换为NSDate还是使用NSString

NSStrings 看起来像:

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

那是对的吗?差异以秒为单位?

4

3 回答 3

5

如果格式变得比您显示的更复杂,请考虑使用 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];
于 2013-04-09T17:34:55.273 回答
0

NSDateFormatter 是做到这一点的“干净”方式。但是,如果您正在寻找快速和肮脏的东西,并且这些是您得到的实际字符串(包括现在和上次时间),我只需使用特定的 NSRange 来提取小时和分钟并进行比较。

请确保,尽管您检查了时间,并且如果“现在”时间在“最后一次”时间之前,则将 24 添加到现在以进行当天翻转。

于 2013-04-09T17:41:41.340 回答
-1

使用 only NSStringNSDateFormatter用于获取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

于 2013-04-09T17:42:20.203 回答