谁能告诉我如何在Swift中将double值舍入到x个小数位?
我有:
var totalWorkTimeInHours = (totalWorkTime/60/60)
Run Code Online (Sandbox Code Playgroud)
与totalWorkTime在第二个是NSTimeInterval(双).
totalWorkTimeInHours 会给我时间,但它给了我这么长的精确数字的时间,例如1.543240952039 ......
当我打印时,如何将其舍入到1.543 totalWorkTimeInHours?
我试过了
var timer = NSTimer()
timer(timeInterval: 0.01, target: self, selector: update, userInfo: nil, repeats: false)
Run Code Online (Sandbox Code Playgroud)
但是,我说错了
'(timeInterval: $T1, target: ViewController, selector: () -> (), userInfo: NilType, repeats: Bool) -> $T6' is not identical to 'NSTimer'
Run Code Online (Sandbox Code Playgroud) 我在NSUserDefaults中存储了两种存储NSDate的方法.
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Run Code Online (Sandbox Code Playgroud)
// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];
// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
Run Code Online (Sandbox Code Playgroud)
选项1
这似乎是紧凑和合乎逻辑的.但是,由于Date Formatter错误,我担心这会出错.
选项2
这似乎很笨拙.我也不确定它的准确性 - 在我做过的一次测试中,当我检索到日期时它已经超过了48秒,尽管Apple Docs说NSTimeInterval具有"亚秒精度".
无论我选择何种方法,都必须:
精确到一秒钟之内.
可读且可靠.
选项2是不准确的,因为我做错了什么?
你会使用这两个选项中的哪一个?
还有其他选择我不知道吗?
谢谢!
我从某个事件中获得了一定的秒数.它存储在NSTimeInterval数据类型中.
我想把它转换成分钟和秒.
例如,我有:"326.4"秒,我想将其转换为以下字符串:"5:26".
实现这一目标的最佳方法是什么?
谢谢.
我正在写一段代码,我想要按下按钮的时间.为此,我NSDate()在按下按钮时录制了一个按钮,并timeIntervalSinceDate在释放按钮时尝试使用该功能.这似乎工作,但我找不到任何方法来打印结果或将其切换为整数.
var timeAtPress = NSDate()
@IBAction func pressed(sender: AnyObject) {
println("pressed")
timeAtPress = NSDate()
}
@IBAction func released(sender: AnyObject) {
println("released")
var elapsedTime = NSDate.timeIntervalSinceDate(timeAtPress)
duration = ???
}
Run Code Online (Sandbox Code Playgroud)
我见过几个类似的问题,但我不知道C所以我很难理解给出的答案.如果有更有效的方法来确定按钮被按下多长时间,我愿意接受建议.提前致谢.
我有一个跨越多年的时间间隔,我希望所有的时间组件从一年到几秒.
我的第一个想法是将一年中的时间间隔除以整数秒,从运行的总秒数中减去该值,将其除以一个月中的秒数,从运行总计中减去该值,依此类推.
这看起来很复杂,我已经读过,无论何时你做一些看起来错综复杂的事情,都可能有内置的方法.
在那儿?
我将Alex的第二种方法整合到我的代码中.
它位于我的界面中由UIDatePicker调用的方法中.
NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;
sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;
NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);
Run Code Online (Sandbox Code Playgroud)
当我将日期选择器设置为过去1年和1天的日期时,我得到:
1年1个月1天16小时0分20秒
这是1个月和16个小时.如果我将日期选择器设置为过去的1天,我的数量相同.
更新:我有一个应用程序,计算你的年龄,给定你的生日(从UIDatePicker设置),但它经常关闭.这证明存在不准确性,但我无法弄清楚它来自哪里,可以吗?
我的代码在这里:
func stringFromTimeInterval(interval:NSTimeInterval) -> NSString {
var ti = NSInteger(interval)
var ms = ti * 1000
var seconds = ti % 60
var minutes = (ti / 60) % 60
var hours = (ti / 3600)
return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds,ms)
}
Run Code Online (Sandbox Code Playgroud)
在输出中毫秒给出错误的结果.请给出如何正确找到毫秒的想法.
我有一个应用程序,其中显示内容给用户.我现在想知道用户实际查看该内容的秒数.所以在我的头文件中,我已经声明了一个
NSDate *startTime;
NSDate *endTime;
Run Code Online (Sandbox Code Playgroud)
然后在我的viewWillAppear中
startTime = [NSDate date];
Run Code Online (Sandbox Code Playgroud)
然后在我的viewWillDisappear中
endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
Run Code Online (Sandbox Code Playgroud)
但是,应用程序崩溃,有时会出现不同的错误.有时它是内存泄漏,有时它是NSTimeInterval的问题,有时它会在第二次返回内容后崩溃.
有任何想法来解决这个问题吗?
我想把NSTimeInterval它格式化为字符串00:00:00(小时,分钟,秒).做这个的最好方式是什么?
如何将NSTimeInterval转换为Integer值?
我的TimeInterval保存了该值83.01837.我需要把它转换成83.我用Google搜索但找不到任何帮助.