将float转换为datatime时出错

用户3781174

我有一个在后台模式下每秒被调用的命令,每次被调用时,我将+1添加到我的float类型的变量中,并转换为日期格式:

xis = (xis + 1) / 000001;

    //The Format which you want as output
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    dateFormat.dateFormat = @"ss:mm:hh";
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

    //The Format in which your dateTime currently is
    NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
    dateFormat1.dateFormat = @"hh.mm";
    [dateFormat1 setTimeZone:[NSTimeZone systemTimeZone]];


    NSString *timeStr = [NSString stringWithFormat:@"%.2f",xis];
    NSDate *dates = [dateFormat1 dateFromString:timeStr];
    NSLog(@"Time: %@", [dateFormat stringFromDate:dates]);

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

        recordTime.text = [NSString stringWithFormat:@"%@",[dateFormat stringFromDate:dates]];

    }];

但是,当时间到00:00:12时,此代码有问题,出了点问题,并且时间是值(null),这可能是造成这种情况的原因,我该如何解决?

有两个问题:

  1. 我建议您不要使用NSTimer例程来跟踪经过的时间。可能不会以您期望的频率调用计时器。另外,如果用户暂停了该应用程序并返回到该应用程序,则您真的不想在应用程序不再处于前台时尝试使此计时器继续运行。简而言之,您希望将UI的更新与经过的时间字符串表示形式的计算脱钩。

    因此,相反,应该捕获“开始时间”,然后让例程获取当前时间,将其与“开始时间”进行比较,并计算该经过时间的字符串表示形式。但值得注意的是,变量不会在经过几秒钟后增加,而应该依赖于设备的系统时间。

  2. 您的格式设置问题源于数字计数器到日期字符串的笨拙转换。由于格式字符串向后倒退,使问题变得复杂ss:mm:hh

    首先(和我上面提到的一样),我可能会通过捕获开始时间并将其存储在CFAbsoluteTime属性中来计算经过的时间(以秒为单位)

    self.start = CFAbsoluteTimeGetCurrent();
    

    而且,如果您真的想使用NSDateFormatter,而不是使用它来解释数字值,我只会将其用于与NSDate对象之间的转换例如,您可以获取NSDatefor 00:00:00,用于dateByAddingTimeInterval将经过的时间添加到日期,然后使用格式化程序获取输出字符串:

    // calculate the time elapsed in seconds
    
    CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - self.start;
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"HH:mm:ss";
    
    NSDate *start = [formatter dateFromString:@"00:00:00"];
    NSDate *end = [start dateByAddingTimeInterval:elapsed];
    NSString *elapsedString = [formatter stringFromDate:end];
    

    话虽如此,我可能会赞成几种不同的方法。一种是仅手动计算小时,分钟和秒:

    // calculate the time elapsed in seconds
    
    CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - self.start;
    
    // convert this to hours, minutes, and seconds
    
    double seconds;
    double minutes;
    double hours;
    
    seconds = modf(elapsed / 60.0, &minutes) * 60.0;
    minutes = modf(minutes / 60.0, &hours) * 60.0;
    
    // create format string
    
    NSString *elapsedString = [NSString stringWithFormat:@"%02.0f:%02.0f:%04.1f", hours, minutes, seconds];
    

    否则将使用完全不同的方法NSCalendar在这种情况下,可能会有一个NSDate您用开始时间初始化属性:

    self.startDate = [NSDate date];
    

    然后您可以执行以下操作:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDate *now = [NSDate date];
    
    NSDateComponents *components = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:self.startDate toDate:now options:0];
    
    NSString *elapsedString = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", (long)components.hour, (long)components.minute, (long)components.second];
    

只是几种方法。但我建议您不要手动手动增加计数器,我可能会建议您使用后一种技术。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将float转换为datatime时出错

来自分类Dev

将float转换为datetime时出错

来自分类Dev

将varchar转换为float asp.net时出错

来自分类Dev

将数据类型 varchar 转换为 float 时出错。?

来自分类Dev

从unsigned int转换为float时出错

来自分类Dev

在 sqlserver 脚本中选择全部时,将数据类型 varchar 转换为 float 时出错

来自分类Dev

存储过程-将数据类型varchar转换为float时出错

来自分类Dev

使用动态T-SQL将数据类型nvarchar转换为float时出错

来自分类Dev

无法将数据类型nvarchar转换为float时出错

来自分类Dev

使用XML路径方法的SQL错误,将数据类型varchar转换为float时出错

来自分类Dev

尝试将Python Pandas中带有字符串的列转换为Float时出错

来自分类Dev

Swift:将UIColor保存到NSUserDefaults时出错(CGFloat无法转换为Float)

来自分类Dev

将DICOM转换为JPEG时出错

来自分类Dev

将double转换为int时出错

来自分类Dev

将Object []转换为byte []时出错

来自分类Dev

将varchar转换为datetime时出错

来自分类Dev

将jpg转换为pdf时出错

来自分类Dev

将jpg转换为pdf时出错

来自分类Dev

将double转换为BigInteger时出错

来自分类Dev

将kml转换为geojson时出错

来自分类Dev

将int转换为NSNumber时出错

来自分类Dev

将mysql转换为mysqli时出错

来自分类Dev

将DICOM转换为JPEG时出错

来自分类Dev

将IplImage转换为Mat时出错

来自分类Dev

将varchar转换为bigint时出错

来自分类Dev

将Range转换为数组时出错

来自分类Dev

将 rxGlm 转换为 GLM 时出错

来自分类Dev

在gnuradio中从Float转换为Char时出错

来自分类Dev

检查大于或小于一个数字时,将数据类型nvarchar转换为float时出错

Related 相关文章

热门标签

归档