首页>Program>source

如何转换维兹威兹 到 NSTimeInterval ? 可以把它想像成秒表.我希望初始日期为00:00:00,并且我有一个 NSDate X秒.

我需要这样做,因为 NSTimeInterval 需要使用 NSTimeInterval转换为int 四舍五入,然后转换为 lround 使用 NSDate 扔进一个字符串.

NSDateFormatter
最新回答
  • 7天前
    1 #

    一个 NSTimeInterval ,顾名思义,它与 NSDate并不代表同一件事 . NSDate时刻的时间.时间间隔是一段时间.要从间隔中得到一个点,您必须有另一个点.您的问题就像问"如何将12英寸转换为我要切割的板上的一个点?" 好吧,这是12英寸,从从哪里开始

    您需要选择一个参考日期.这很可能是 NSDate 代表您启动计数器的时间.然后您可以使用 +[NSDate dateWithTimeInterval:sinceDate:]-[NSDate dateByAddingTimeInterval:]

    也就是说,我很确定您正在考虑这个问题.您正在尝试显示从某个起点(即interval)开始经过的时间,而不是当前时间.每次更新显示时,您都应该使用新的时间间隔.例如(假设您有一个定时器定期触发以进行更新):

    - (void) updateElapsedTimeDisplay: (NSTimer *)tim {
        // You could also have stored the start time using
        // CFAbsoluteTimeGetCurrent()
        NSTimeInterval elapsedTime = [startDate timeIntervalSinceNow];
        // Divide the interval by 3600 and keep the quotient and remainder
        div_t h = div(elapsedTime, 3600);
        int hours = h.quot;
        // Divide the remainder by 60; the quotient is minutes, the remainder
        // is seconds.
        div_t m = div(h.rem, 60);
        int minutes = m.quot;
        int seconds = m.rem;
        // If you want to get the individual digits of the units, use div again
        // with a divisor of 10.
        NSLog(@"%d:%d:%d", hours, minutes, seconds);
     }
    

  • 7天前
    2 #

    此处显示了往返的轻松转换:

    NSDate * now = [NSDate date];
     NSTimeInterval  tiNow = [now timeIntervalSinceReferenceDate]; 
     NSDate * newNow = [NSDate dateWithTimeIntervalSinceReferenceDate:tiNow];
    

    Ole K Hornnes

  • 7天前
    3 #

    我建议您不要使用 NSDateFormatter 如果您希望显示时间间隔. NSDateFormatter 当您希望以本地或特定时区显示时间时,此功能很有用.但是在这种情况下,如果时间经过时区调整(例如,一年中的一天有23个小时),那将是一个错误。

    NSTimeInterval time = ...;
    NSString *string = [NSString stringWithFormat:@"%02li:%02li:%02li",
                                                  lround(floor(time / 3600.)) % 100,
                                                  lround(floor(time / 60.)) % 60,
                                                  lround(floor(time)) % 60];
    

  • 7天前
    4 #

    如果您将初始日期存储在 NSDate中 对象,则可以在以后的任何时间间隔获取新日期.只需使用 dateByAddingTimeInterval: 像这样:

    NSDate * originalDate = [NSDate date];
    NSTimeInterval interval = 1;
    NSDate * futureDate = [originalDate dateByAddingTimeInterval:interval];
    

  • 7天前
    5 #

    通过苹果开发人员:

    // 1408709486-时间间隔值

    NSDate *lastUpdate = [[NSDate alloc] initWithTimeIntervalSince1970:1408709486];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
    NSLog(@"date time: %@", [dateFormatter stringFromDate:lastUpdate]);
    

    您将获得: 日期时间:2014年8月22日,下午3:11:26

  • datetime:比较两个日期的Google Apps脚本
  • return:从函数中早返回是否比if语句更优雅?