我想每毫秒更改一次计时器,但是它没有按预期工作。
NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector: Selector("advanceTimer:"), userInfo: nil, repeats: true);
func advanceTimer(timer: NSTimer){
self.time += 0.001;
let milliseconds = self.time * 100;
let remaingMilliseconds = Int((milliseconds % 1000) / 10);
let seconds = Int((milliseconds / 1000) % 60)
let strSeconds = String(format: "%02d", seconds)
let strFraction = String(format: "%02d", remaingMilliseconds)
timerText.text = "\(strSeconds):\(strFraction)";
}
结果是
计时器以毫秒为单位更改为100(00:100),然后更改为01:00 = 40真实秒
邓肯方法:
var time: NSTimeInterval = 0;
var startTime: NSTimeInterval = 0;
//And your timer method...
func advanceTimer(timer: NSTimer){
//Total time since timer started, in seconds
self.time = NSDate.timeIntervalSinceReferenceDate() - startTime
println(self.time);
//The rest of your code goes here
}
override func didMoveToView(view: SKView) {
// Set anchor point
self.anchorPoint = CGPointMake(0.5, 0.5);
var startTime: NSTimeInterval
//Sart the timer
startTime = NSDate.timeIntervalSinceReferenceDate()
NSTimer.scheduledTimerWithTimeInterval(0.02,
target: self,
selector: Selector("advanceTimer:"),
userInfo: nil,
repeats: true)
}
结果:456680125.54539第一次打印
正如Martin在评论中所说,计时器的分辨率为50-100毫秒(0.05至0.1秒)。尝试以短于该间隔的时间运行计时器将无法获得可靠的结果。另外,计时器不是实时的。它们取决于它们所附加的运行循环,并且如果运行循环变得繁忙,则计时器的启动会延迟。
不要在每次触发计时器时尝试增加计数器,而是在启动计时器时记录开始时间,然后做一些数学运算以弄清楚发生了多少时间:
var startTime: NSTimeInterval
//Sart the timer
startTime = NSDate.timeIntervalSinceReferenceDate()
NSTimer.scheduledTimerWithTimeInterval(0.02,
target: self,
selector: Selector("advanceTimer:"),
userInfo: nil,
repeats: true)
//And your timer method...
func advanceTimer(timer: NSTimer)
{
//Total time since timer started, in seconds
self.time = NSDate.timeIntervalSinceReferenceDate() - startTime
//The rest of your code goes here
}
此代码的Swift 3版本如下所示:
(写为测试项目中的视图控制器)
class ViewController: UIViewController {
weak var timer: Timer?
var startTime: Double = 0
var time: Double = 0
@IBOutlet weak var timeValueLabel: UILabel!
/*
When the view controller first appears, record the time and start a timer
*/
override func viewDidAppear(_ animated: Bool) {
startTime = Date().timeIntervalSinceReferenceDate
timer = Timer.scheduledTimer(timeInterval: 0.05,
target: self,
selector: #selector(advanceTimer(timer:)),
userInfo: nil,
repeats: true)
}
//When the view controller is about to disappear, invalidate the timer
override func viewWillDisappear(_ animated: Bool) {
timer?.invalidate()
}
func advanceTimer(timer: Timer) {
//Total time since timer started, in seconds
time = Date().timeIntervalSinceReferenceDate - startTime
//The rest of your code goes here
//Convert the time to a string with 2 decimal places
let timeString = String(format: "%.2f", time)
//Display the time string to a label in our view controller
timeValueLabel.text = timeString
}
}
问题内容: 我通过传递ipAddress来对方法进行调用,它会返回ipAddress的位置,例如国家/地区,城市等。因此,我试图查看每个调用花费的时间。因此,我在调用方法之前设置了start_time,在调用之后设置了end_time。 所以有时候我得到的差为0 。并且resp包含有效的响应。 因此,这意味着有时需要0毫秒才能恢复响应。任何建议将不胜感激。 问题答案: 试试这个
问题内容: 有什么办法可以使时间戳记中的毫秒数变为或(或出于好奇而使毫秒数)? 是否有这样的事情: 或者,唯一的选择是使用从? 问题答案: 在MySQL中 以秒 为单位获取Unix时间戳: 详细信息:http : //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix- timestamp 未经测试的
问题内容: 在我可以设置例如 是否有任何符号(%something)以毫秒为单位返回当前时间? 问题答案: 没有完全符合您需要的Log4J符号。 以给定的模式返回当前日期,该模式由(放在方括号之间的模式)定义,但是没有给您以毫秒为单位的时间。 给出自 执行开始以来的 毫秒数。 实现所需目标的一种可能方法是扩展Log4j的行为,这要复杂得多,但是如果绝对必要,请按以下步骤进行: 自定义log4j(编
问题内容: Linux中是否有shell命令来获取时间(以毫秒为单位)? 问题答案: 返回秒数+当前纳秒。 因此,这就是您所需要的。 例: 返回自纪元以来的秒数(如果有用)。
问题内容: 我的代码在这里: 在输出中毫秒数会给出错误的结果。请给出一个如何正确找到毫秒数的想法。 问题答案: Swift支持对浮点数进行余数计算,因此我们可以使用。 如: 结果: 斯威夫特4: 用:
两个时间戳的示例 困难的部分原因是我认为没有类似的包来处理它。我不确定是否需要使用正则表达式来提取秒,然后将纳秒转换为毫秒。我愿意接受任何建议。 另外,您建议如何处理?我想我应该使用,然后像这样的包可以解析时间戳,甚至可以达到纳秒级的精度?