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

Java 在iOS/Android和Firebase中处理日期的最佳方式是什么?,java,android,ios,firebase,swift3,Java,Android,Ios,Firebase,Swift3,我正在用android和iOS(swift3)开发两个本机应用程序,我的一些类使用Date对象,但当我将一个Date对象从android保存到Firebase实时数据库时,结构如下: 创建日期:{ 日期:3 日期:2 时间:17 会议记录:27 月份:9 秒:43 时间:1507062463000 时区偏移:180 年份:117 } 但这在iOS中并不是一个常见的结构(根据我的搜索结果) 更好的解决方案是什么: 在iOS中创建编码器/解码器以读取和写入此结构 将android中的读写更改为使用i

我正在用android和iOS(swift3)开发两个本机应用程序,我的一些类使用Date对象,但当我将一个Date对象从android保存到Firebase实时数据库时,结构如下:

创建日期:{
日期:3
日期:2
时间:17
会议记录:27
月份:9
秒:43
时间:1507062463000
时区偏移:180
年份:117
}

但这在iOS中并不是一个常见的结构(根据我的搜索结果)

更好的解决方案是什么:

  • 在iOS中创建编码器/解码器以读取和写入此结构
  • 将android中的读写更改为使用iso日期保存在firebase中?类似这样的内容(yyyy-MM-dd'HH:MM:ss.ssszzzz)

  • 谢谢

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

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

    例如(Swift):

    编辑:Firebase 4

    myRef.setValue(ServerValue.timestamp())
    
    对于iOS,请使用此

    为了将当前时间保存到firebase数据库,我使用Unic Epoch对话:

    let timestamp = NSDate().timeIntervalSince1970
    
    和用于解码Unix Epoch time to Date()


    您应该使用时间戳(自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)))
    
    android(Kotlin)(注意,在android中,时间戳以毫秒为单位)


    我会推荐您列出的第二个选项,以便将来,如果您还需要其他数据,您的数据会更加灵活。可能会重复“确定”,谢谢回复!!但是您知道这在脱机模式下是否有效吗?是的,它仍然有效,但将使用用户的设备时间戳,直到数据发送到服务器,在服务器上,值将由更准确的Firebase时间戳更新。
    let myTimeInterval = TimeInterval(timestamp)
    let time = NSDate(timeIntervalSince1970: TimeInterval(myTimeInterval))
    
    // Get current timestamp
    let currentTimestamp = NSDate().timeIntervalSince1970
    
    // Get date from timestamp
    let date = NSDate(timeIntervalSince1970: TimeInterval(TimeInterval(yourTimestamp)))
    
    // 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