Sqlite - 如何在Swift中检索DATETIME字段?

时间:2015-07-04 19:04:31

标签: swift sqlite nsdate fmdb

我正在尝试使用以下代码从SQLite DB中检索名为TIMESTAMP的DATETIME字段:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
var d1: NSDate  = NSDate()
if getData.dictLocations["TIMESTAMP"] != nil {    
    d1 = dateFormatter.dateFromString(getData.dictLocationsNames["TIMESTAMP"]!)!
    } else {
    dateCreatedLabel.text = "FAILED"
} 

问题似乎源于getData只有两个选项:

getData.dictLocation which is <String, Double> or
getData.dictLocationNames which is <String, String>

那我怎么拉日期呢?毋庸置疑,示例代码始终显示,&#34; FAILED&#34;。

有什么想法吗?我正在使用FMDB。

这取代了我今天早些时候提出的类似问题,现在已经删除了,这个问题太宽泛了。

1 个答案:

答案 0 :(得分:1)

当您将NSDate对象作为参数传递给FMDB中的executeQueryexecuteUpdate时,它会为您进行必要的转换。您根本不必(也不应该)使用NSDateFormatter。让FMDB为您处理。

例如:

if !db.executeUpdate("create table foo (bar text, transactionTimestamp text)", withArgumentsInArray: nil) {
    println(db.lastErrorMessage())
}

if !db.executeUpdate("insert into foo (bar, transactionTimestamp) values (?, ?)",  withArgumentsInArray: ["baz", NSDate()]) {
    println(db.lastErrorMessage())
}

if let rs = db.executeQuery("select bar, transactionTimestamp from foo", withArgumentsInArray: nil) {
    while rs.next() {
        let bar       = rs.stringForColumn("bar")
        let timestamp = rs.dateForColumn("transactionTimestamp")

        println("bar = \(bar); timestamp = \(timestamp)")
    }
    rs.close()
} else {
    println(db.lastErrorMessage())
}