如何在swift中记录开始和结束时间

时间:2018-05-28 01:38:59

标签: ios swift

我正在尝试编写一个基本的计时器应用程序,它将记录您点击开始的时间和结束的时间并进行比较。到目前为止我所做的所有尝试都没有打印时间,默认为其原始定义。

<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>

1 个答案:

答案 0 :(得分:1)

你需要两件事,你需要两个时间点来比较,startTimeendTime(我知道听起来很简单,但你似乎错过了这些点)。

您似乎正在记录永不改变的“静态”时间点

因此,当调用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(我知道,激动人心,但它提供了这个想法的种子;)