获取所选时区的当地时间 - Swift

Get the local time of chosen timezone - Swift

我正在创建一个社交媒体应用程序。您每 24 小时只能 post 一次,我将它与 firebase 一起使用,因此所有 post' 数据都会进入 firebase 数据库。

创建 post 时,我有变量 Date,这就是您跟踪自上次 post...

以来是否已过去 24 小时的方式

唯一的问题是用户可以更改他们设备上的时钟,并且 post 可以根据需要多次更改。我需要获取一个日期变量,该变量是我所在时区 (EST) 的本地时间,因此我知道数据是准确的,但我不确定该怎么做...

这是我通常获取当前日期的方式:

let date = Date()
let currentTime = date.timeIntervalSince1970

所以,我只需要让 currentTime 成为当前东部标准时间 (EST)

提前致谢!

从 firebase 服务器获取当前时间戳并与上次 post

的日期进行比较
firebase.database.ServerValue.TIMESTAMP

去这里参考firebase.database

Firestore

firebase.firestore.Timestamp.now()

参考这里firebase.firestore

如果你想确定24小时过去了,你需要比较UTC的日期,而不是EST,UTC是没有任何时区的日期

这里

let date = Date()
let currentTime = date.timeIntervalSince1970

你有 UTC 时间戳

UPD:发布本身的事实应该在服务器上专门检查,而服务器应该在发布之前使用它的 UTC 时间并从数据库中检查最后一次发布的时间。

如果您不信任设备时间,您可以使用 NTP 客户端通过互联网连接获取日期。

有一些用 Swift 编写的实现,例如 TrueTime and Kronos。 两者似乎都默认使用 time.apple.com.

他们各自的指南(在 README 文件上)似乎非常简单。

使用 TrueTime 的示例:

let client = TrueTimeClient()
client.start()
client.fetchIfNeeded { result in
    switch result {
    case let .success(referenceTime):
        // Current date
        let now = referenceTime.now()
        client.pause()
    case let .failure(error):
        print("Error: \(error)")
    }
}

使用 Kronos 的示例:

Clock.sync { date, offset in
    // Current date
    print(date)
}