我正在尝试编写一个基本的计时器应用程序,它将记录您点击开始的时间和结束的时间并进行比较。到目前为止我所做的所有尝试都没有打印时间,默认为其原始定义。
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.0-beta.5</version>
<scope>test</scope>
</dependency>
答案 0 :(得分:1)
你需要两件事,你需要两个时间点来比较,startTime
和endTime
(我知道听起来很简单,但你似乎错过了这些点)。
您似乎正在记录永不改变的“静态”时间点
因此,当调用startTime
时,您将startTime
属性初始化为“now”(即Date()
)。
var startTime: Date?
//...
startTime = Date()
调用endTime
后,您可以使用Date().timeIntervalSince
标记并计算时差,从而为您提供TimeInterval
guard let startTime = startTime else {
return
}
let duration = Date().timeIntervalSince(startTime)
虽然使用简单的模块化数学来计算格式可能很诱人,但我会避免它,间隔变得越大就越容易出错。
相反,我会使用DateComponentsFormatter
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
formatter.allowedUnits = [ .day, .hour, .minute, .second]
let durationFormat = formatter.string(from: duration)
有关详细信息,请查看Formatting a Duration with NSDateComponentsFormatter - 虽然它有点过时,但它可以提供有关API如何工作的一些见解
因为这些事情可能有点复杂,我倾向于使用Playground来测试一些基本的想法,所以以下......
let startTime = Date()
Thread.sleep(forTimeInterval: 2.0)
let duration = Date().timeIntervalSince(startTime)
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
formatter.allowedUnits = [ .day, .hour, .minute, .second]
formatter.string(from: duration)
最终会显示2s
(我知道,激动人心,但它提供了这个想法的种子;)