Swift Firebase ServerTime.timestamp()返回的日期为负数。
我的Firebase调用似乎返回了负值。我按如下方式存储日期值: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
["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
。