如何解决获取所选时区的本地时间-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编写的实现,例如TrueTime和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)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。