微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决获取所选时区的本地时间-Swift

我正在创建一个社交媒体应用程序。您每24小时只能发布一次,而我将它与firebase一起使用,因此所有发布的数据都将保存到firebase数据库中。

创建帖子时,我有一个变量Date,这是您如何跟踪上次发布后已经过了24小时...

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

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

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

因此,我只需要将currentTime设置为当前的东部标准时间(EST)

谢谢!

解决方法

从firebase服务器获取当前时间戳,并与上一篇文章的日期进行比较

firebase.database.ServerValue.TIMESTAMP

转到此处以供参考firebase.database

用于消防站

firebase.firestore.Timestamp.now()

转到此处以供参考firebase.firestore

,

如果要确保已过去24小时,则需要以UTC(而不是EST)比较日期,因为UTC是没有任何时区的日期

在这里

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

您有UTC时间戳

UPD:发布本身的事实应在服务器上专门检查,而服务器应在发布之前花费其UTC时间并从数据库检查上次发布时间。

,

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

有一些用Swift编写的实现,例如TrueTimeKronos。 两者似乎默认使用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)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。