代码之家  ›  专栏  ›  技术社区  ›  gcstr

具有浮点值的nsstring到nsdate

  •  0
  • gcstr  · 技术社区  · 14 年前

    我正在开发一个OSX桌面应用程序,它可以跟踪赛车比赛的时间。

    飞行员之间的差异可能非常小,因此每圈采集的数据在几秒钟内都有一个浮点值:

    bestLap = @"00:01:39.5930000"
    

    但我需要比较每名飞行员的时间并进行分类。我正试图用nsdateFormatter将其转换为nsdate对象,但无法使其正常工作。

    是否可以将这样的字符串转换为nsdate?如果是,如何比较和排序包含nsdates的数组

    谢谢

    2 回复  |  直到 14 年前
        1
  •  3
  •   kennytm    14 年前

    nsdate用于表示 日期 ,不是时间间隔。

    此外,如果目的只是对它们进行排序,则无需将字符串转换为nsdate或nstimeinterval,因为如果时间间隔短于格式中的另一个时间间隔,则它们已经按字典顺序排列。

    也就是说,打电话 -sortUsingSelector: 就够了。

    [theMutableArrayOfLaps sortUsingSelector:@selector(compare:)];
    
        2
  •  1
  •   walkytalky    14 年前

    正如Kennytm所说,如果你只需要排序,那么词典排序就足够了。如果您真的想获得用于比较和报告目的的数值,可以将字符串分解为组件并转换为 double 像这样:

    NSArray* parts = [bestLap componentsSeparatedByString:@":"];
    double bestLapInSeconds = [[parts objectAtIndex:0] doubleValue] * 3600    // hours
                              + [[parts objectAtIndex:1] doubleValue] * 60    // minutes
                              + [[parts objectAtIndex:2] doubleValue];        // seconds
    

    (注意,这只是轻率地假定原始字符串符合“h:m:s”格式,而不进行任何错误检查。在现实生活中,你通常不应该这样做!)