Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firebase ServerTime.timestamp()返回的日期为负数。_Swift_Firebase Realtime Database - Fatal编程技术网

Swift Firebase ServerTime.timestamp()返回的日期为负数。

Swift Firebase ServerTime.timestamp()返回的日期为负数。,swift,firebase-realtime-database,Swift,Firebase Realtime Database,我的Firebase调用似乎返回了负值。我按如下方式存储日期值: ["ctn": ServerValue.timestamp()] 当我检查数据库时,它有: "users" { "$uid" { "ctn" : "1505930238317" } } 当我试图从数据库中取出它并像这样打印它时: dbRootRef.child("users").child(user.getUserUID()).child("ctn").observeSingleEv

我的Firebase调用似乎返回了负值。我按如下方式存储日期值:

["ctn": ServerValue.timestamp()]
当我检查数据库时,它有:

 "users" {
     "$uid" {
          "ctn" : "1505930238317"
     }
 }
当我试图从数据库中取出它并像这样打印它时:

dbRootRef.child("users").child(user.getUserUID()).child("ctn").observeSingleEvent(of: .value, with: { (snapshot) in

        if let item = snapshot.value as? Int{
            timeNow = item
            print("db time \(item)")
        }
}
控制台显示:

数据库时间-1603282711


有什么想法吗?

时间戳是非常大的数字,在大多数类型化语言中,它们不符合整数数据类型的限制

您得到的是一个负值,因为在将时间戳强制转换为整数时,您已使其变为负值

使用
Double
UInt64
数据类型而不是
Int
,您应该会看到正确的值

if let item = snapshot.value as? UInt64 {
    timeNow = item // ensure that timeNow is declared as a UInt64
    print("db time \(item)")
}

时间戳是非常大的数字,在大多数类型化语言中,它们不符合整数数据类型的限制

您得到的是一个负值,因为在将时间戳强制转换为整数时,您已使其变为负值

使用
Double
UInt64
数据类型而不是
Int
,您应该会看到正确的值

if let item = snapshot.value as? UInt64 {
    timeNow = item // ensure that timeNow is declared as a UInt64
    print("db time \(item)")
}

尝试使用
NSNumber
Int64
UInt64
而不是
Int
,实际上,
Int32(截断位模式:1505930238317为UInt64)
返回
-1603282711
——显然您是在32位体系结构上。这种“隐藏截断”在Swift 4中是固定的:。尝试使用
NSNumber
Int64
UInt64
而不是
Int
实际上,
Int32(截断位模式:1505930238317为UInt64)
返回
-1603282711
——显然您是在32位体系结构上。Swift 4中修复了此“隐藏截断”:当我使用您的代码时,xcode要求我将timeNow=item更改为
timeNow=Int(item)
,然后crashes@JamesG同样,你现在需要改变你的时间type@JamesG您的时间戳以毫秒为单位。如果您将其除以1000.0,那么它应该适合所有平台上的
Int
。当我使用您的代码时,xcode要求我将timeNow=item更改为
timeNow=Int(item)
,然后crashes@JamesG同样,你现在需要改变你的时间type@JamesG您的时间戳以毫秒为单位。如果将它除以1000.0,那么它应该适合所有平台上的
Int