【问题标题】:How to calculate the total of traveled time如何计算总行程时间
【发布时间】:2014-07-13 06:19:18
【问题描述】:

我需要一个 NSString 来显示使用 2 NSStrings 的总行驶时间

我有

NSString *origin = [NSString stringWithFormat:@"5:30"];
NSString *destiny = [NSString stringWithFormat:@"6:00"];

问题是我不知道如何将此NSStrings 格式化为NSDate 并执行destiny - origin 所以输出将是一个新的NSString,上面写着30 minutes

编辑:我刚刚对NSDateFormatter 进行了一些调查,但如果我使用它:

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm"];
NSDate * mydate = [dateFormatter dateFromString:origin];

NSDate 回复我nil 有什么问题吗?

任何帮助将不胜感激。

【问题讨论】:

  • 你调查过NSDateFormatter吗?这将是答案,因为它在日期和字符串之间进行转换(双向)。但是,如果您查看了它并且由于某种原因看不到它,那么也许我们可以回答一个更具体的问题?
  • 你需要的是NSDateFormatter,文档在这里:developer.apple.com/library/mac/documentation/Cocoa/Reference/…
  • 如果您只有两次,NSDateFormatter 不是正确的解决方案。两个时间字符串是从哪里来的?为什么要使用字符串来跟踪时间?
  • @rmaddy 这也是我的第一个想法
  • 我的回答:去做吧。你必须以艰难的方式去做。解析字符串。将其转换为某种数据格式。定义减法函数。减去日期。编写一个将结果转换为“30 分钟”之类的函数。

标签: ios objective-c nsstring nsdate


【解决方案1】:
NSString *origin = @"5:30";
NSString *destiny = @"6:00";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"H:mm"];

NSDate *originDate = [dateFormatter dateFromString:origin];
NSDate *destinyDate = [dateFormatter dateFromString:destiny];

NSTimeInterval interval = [destinyDate timeIntervalSinceDate:originDate];
NSDate *intervalDate = [NSDate dateWithTimeInterval:interval sinceDate:originDate ];

NSDateComponents *comps =[[NSCalendar currentCalendar] components:NSMinuteCalendarUnit
                                                         fromDate:originDate
                                                           toDate:intervalDate
                                                          options:0];

现在 NSDateComponents 将在几分钟内保持差异

NSLog(@"%ld", [comps minute]);

将记录30

如果你想要小时和分钟,你可以这样做

NSString *origin = @"5:30";
NSString *destiny = @"7:00";

// .... 

NSDateComponents *comps =[[NSCalendar currentCalendar] components: (NSMinuteCalendarUnit|NSHourCalendarUnit)
                                                         fromDate:originDate
                                                           toDate:intervalDate
                                                          options:0];

现在比赛会将 90 分钟保留为 1 小时 30 分钟。

NSLog(@"%ld %ld", [comps hour],[comps minute]);

日志1 30

【讨论】:

    【解决方案2】:
    NSString *origin = @"5:30";
    NSString *destiny = @"6:00";
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"H:mm"];
    NSDate *originDate = [dateFormatter dateFromString:origin];
    NSDate *destinyDate = [dateFormatter dateFromString:destiny];
    
    NSTimeInterval diffInSeconds = [destinyDate timeIntervalSinceDate:originDate];
    NSTimeInterval diffInMinutes = diffInSeconds / 60;
    NSString *minutesString = [NSString stringWithFormat:@"%0.0f", diffInMinutes];
    

    【讨论】:

    • 您使用 HH:mm 的代码返回 nil,因为 HH 需要两位数的小时,而您的日期仅包含一位数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2015-08-17
    • 2021-11-25
    • 2022-01-03
    • 2012-02-15
    • 2020-10-17
    相关资源
    最近更新 更多