【问题标题】:Difference in hours between two NSDate两个 NSDate 之间的小时数差异
【发布时间】:2012-05-05 20:41:33
【问题描述】:

我在这里尝试计算两个日期之间的小时数。当我运行应用程序时,它崩溃了。你能告诉我这段代码中的错误吗?

NSString *lastViewedString = @"2012-04-25 06:13:21 +0000";
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];

NSDate *lastViewed = [[dateFormatter dateFromString:lastViewedString] retain];
NSDate *now = [NSDate date];

NSLog(@"lastViewed: %@", lastViewed); //2012-04-25 06:13:21 +0000
NSLog(@"now: %@", now); //2012-04-25 07:00:30 +0000

NSTimeInterval distanceBetweenDates = [now timeIntervalSinceDate:lastViewed];
double secondsInAnHour = 3600;
NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

NSLog(@"hoursBetweenDates: %@", hoursBetweenDates);

【问题讨论】:

  • NSLog(@"hoursBetweenDates: %d", hoursBetweenDates);
  • 将解决问题的更改合并到问题的代码中是没有意义的。在那次编辑之后,您的代码不再崩溃,所以我回滚到问题的原始版本。
  • 在编译器中打开警告。有一个严重的错误,如果打开警告,编译器会告诉你的。

标签: iphone objective-c ios xcode nsdate


【解决方案1】:

我认为差异应该在于 int 值...

NSLog(@"hoursBetweenDates: %d", hoursBetweenDates);

希望对你有所帮助..

【讨论】:

    【解决方案2】:

    NSInteger 无法使用

    显示
    NSLog(@"%@", hoursBetweenDates);
    

    改为使用:

    NSLog(@"%d", hoursBetweenDates); 
    

    如果不确定要使用什么,请查看 Apple 开发者文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265

    【讨论】:

      【解决方案3】:

      参考this answer of a mostly similar question 一个更好的Apple 认可的方法是使用NSCalendar 方法,如下所示:

      - (NSInteger)hoursBetween:(NSDate *)firstDate and:(NSDate *)secondDate {
         NSUInteger unitFlags = NSCalendarUnitHour;
         NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
         NSDateComponents *components = [calendar components:unitFlags fromDate:firstDate toDate:secondDate options:0];
         return [components hour]+1;
      }
      

      如果您的目标是 iOS 8 或更高版本,请使用 NSCalendarIdentifierGregorian 而不是已弃用的 NSGregorianCalendar

      【讨论】:

        猜你喜欢
        • 2013-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多