【问题标题】:How to calculate different between two NSDate variable?如何计算两个 NSDate 变量之间的差异?
【发布时间】:2015-05-19 13:46:33
【问题描述】:

我正在构建一个 IOS 应用程序,我正在执行以下步骤。

  1. 解析数据。
  2. 获取 OpenTime 和 CloseTime。
  3. 将 NSString 变量名中的 OpenTime 和 CloseTime 设置为 openTime 和 closeTime。

现在的问题是我想计算这两次的不同。

我得到的价值是, OpenTime = "00:15:00"CloseTime = "1:30:00"

时间格式是 - 24 小时。

有人可以帮我解决这个问题吗?我是 IOS 新手。

【问题讨论】:

  • 预期输出是什么?
  • 大概你的字符串是从某个远程的地方传递过来的?如果您在设备上生成它们,请不要将它们存储为字符串。
  • @Logan。假设 NSString *openTime = @"00:15:00"; NSString *closeTime = @"1:30:00";在这 2 个字符串中,我有 Time 值,我需要这 2 个值的不同。
  • @Tommy 我应该存储哪个数据类型以及如何计算不同的时间
  • @MarcusAdams 假设 OpenTime 是 -“00:15:00”,closeTime 是“00:45:00”,那么在这种情况下,预期输出应该是“00:30:00”。跨度>

标签: objective-c nsdate nsdateformatter


【解决方案1】:

假设你有两个 NSDate 变量 openTimecloseTime

int calendarUnit = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

NSDateComponents *components = [[NSCalendar currentCalendar] components:calendarUnit fromDate: openTime   toDate: closeTime  options:0];

int months = [components month];
int days = [components day];
int hours = [components hour];
int minutes = [components minute];

【讨论】:

  • 这不是假设他有NSDates,而不是NSStrings?
  • 查看问题标题“两个NSDate变量之间的差异”
  • 我在 String 中有值,你能在这种情况下帮忙吗
  • @TapasPal 在问题文本中他说“将 NSString 变量名称中的 OpenTime 和 CloseTime 设置为 openTime 和 closeTime。”
【解决方案2】:

你可以使用 NSDateComponents

NSDate *date = [self getTimeInDateFormatFromString://your time string]; // your method return nsdate from string using nsformatter
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comp = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date];

您可以使用 comp.hour 和 minute 来获取时差。

【讨论】:

  • 感谢您的回答能否详细解释您的代码
  • 转换后的日期将分解为 nsdatecomponents,它将以整数格式返回小时和分钟。您可以比较两个日期组件以获得所需的结果,即两个日期的差异。以下链接带有代码 sn-p :stackoverflow.com/a/30328363/4916336
【解决方案3】:
NSString *openTime = @"12:48:00";
NSString *closingTime = @"21:52:00";

NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"hh:mm:ss"];

NSDate *openDate = [formatter dateFromString:openTime];
NSDate *closeDate = [formatter dateFromString:closingTime];

int calendarUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

NSDateComponents *components = [[NSCalendar currentCalendar] components:calendarUnits fromDate: openDate toDate: closeDate options:0];

NSLog(@"The difference is: %ld hours , %ld minutes, %ld seconds", (long)components.hour, (long)components.minute, (long)components.second);

【讨论】:

    【解决方案4】:
    -(void)compareTwoDate:(NSDate *)start :(NSDate *)end
    {
        NSDate *end_date =end;
        NSDate *startDate =start;
    
        NSTimeInterval distanceBetweenDates = [startDate    timeIntervalSinceDate:end_date];
    
        double secondsInMinute = 60;
    
        NSInteger secondsBetweenDates = distanceBetweenDates / secondsInMinute;
    }
    

    【讨论】:

    • 您可能想告诉 OP 如何将日期从字符串转换为 NSDate 对象,以及为什么要以分钟为单位计算差异。
    • @trojanfoe,您的开始和结束时间是 NSString 还是 NSDate 格式?
    • OPs 日期为字符串格式。该方法也应该是return 的东西。
    • @trojanfoe,已经在下面发布了答案。在这里,您将在几秒钟内获得差异。比你可以在几分钟或几小时内转换。
    【解决方案5】:
    NSArray *star_array=[@"00:15:00" componentsSeparatedByString:@":"];
    
    NSInteger start_time=[[star_array objectAtIndex:2] integerValue]*3600+[[star_array objectAtIndex:1] integerValue]*60+[[star_array objectAtIndex:0] integerValue];
    
    NSArray *end_array=[@"1:30:00" componentsSeparatedByString:@":"];
    NSInteger end_time=[[end_array objectAtIndex:2] integerValue]*3600+[[end_array objectAtIndex:1] integerValue]*60+[[end_array objectAtIndex:0] integerValue];
    
    NSInteger diff_seconds=end_time-start_time;
    

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多