在iOS/Android和Firebase中,处理日期的最佳方法是什么?

3
我正在开发两个本地应用程序,一个是Android的,另一个是iOS的(swift3)。我的一些类使用Date对象,但当我将一个Date对象从Android保存到Firebase实时数据库时,其结构如下所示:
creationDate: { date: 3 day: 2 hours: 17 minutes: 27 month: 9 seconds: 43 time: 1507062463000 timezoneOffset: 180 year: 117 }
但这不是iOS中的常见结构(基于我的搜索结果)。更好的解决方案是:
1.在iOS中创建编码器/解码器来读取和写入这个结构?
2.更改Android中的读写方式,以使用ISO日期格式将数据保存在Firebase中?例如(yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ)
谢谢

我建议你选择你列出的第二个选项,这样将来如果你需要用到数据做其他事情,它会更加灵活。 - undefined
可能是重复的问题,与iOS Swift - 获取当前本地时间和日期时间戳相似。 - undefined
3个回答

4

我建议使用 FIRServerValue.timestamp()。这将确保在保存数据到数据库时使用 Firebase 服务器时间戳,这是最准确的时间,因为它不能被用户篡改,并且在 iOS 和 Android 上完全相同。

保存的数据是自1970年以来的毫秒数,您可以轻松地将其转换为日期对象。

例如(Swift):

myRef.setValue(FIRServerValue.timestamp())

编辑:Firebase 4

myRef.setValue(ServerValue.timestamp())

好的,谢谢你的回复!但是你知道在离线模式下这个会不会起作用吗? - undefined
是的,它仍然可以工作,但会使用用户设备的时间戳,直到数据被发送到服务器,在那里该值将由更准确的Firebase时间戳更新。 - undefined

2

对于iOS,请使用以下内容:

为了将当前时间保存到Firebase数据库中,我使用了Unix纪元转换:

let timestamp = NSDate().timeIntervalSince1970

解码Unix Epoch时间到日期的方法。

let myTimeInterval = TimeInterval(timestamp)
let time = NSDate(timeIntervalSince1970: TimeInterval(myTimeInterval))

0

你应该使用一个时间戳(自1970年1月1日UTC的Unix纪元以来的秒数):

iOS(Swift)

// Get current timestamp
let currentTimestamp = NSDate().timeIntervalSince1970

// Get date from timestamp
let date = NSDate(timeIntervalSince1970: TimeInterval(TimeInterval(yourTimestamp)))

安卓(Kotlin)(注意,在安卓中,时间戳是以毫秒为单位的)

// Get current timestamp
val currentTimestamp = System.currentTimeMillis() / 1000 // We want timestamp in seconds

// Get date from timestamp
val date = Date(yourTimestamp * 1000) // Timestamp must be in ms to be converted to Date

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接