今天使用FMDB作一個例子程序,新建的一張表有一個datetime字段,數據庫有默認值,大概以下sql
CREATE TABLE [ConsumptionType] ([id] INTEGER PRIMARY KEY NOT NULL ,[name] TEXT,[level] TEXT,[creatdate] DATETIME default (datetime('now', 'localtime')))
當我每次去讀取creatdate的時候獲取到得值的是1970的時間,之前一直用字符串存時間戳,沒發現這個問題數據庫
,刪掉表作了幾回仍是不行。數組
temp.creatdate=[rs dateForColumn:@"creatdate"];//1970 這種方式讀取到的時間一直不對
,後來我把它讀取成字符串,spa
temp.creatdate=[rs stringForColumn:@"creatdate"];//這樣是讀取出來了正確的時間
這就說明數據庫存取是正確的,只是再讀取的時候出了問題,點進源碼去看發現orm
FMDatabase類有一個NSDateFormatter屬性,但它爲空的時候,會採用默認的解析時間類型blog
因此想正確處理datetime 類型的數據時就須要傳一個NSDateFormatter給db,這樣就能夠獲取到字符串
正確的值。get
/** * 獲取全部的消費分類 * * @return 以數組形式返回全部的消費分類 */ + (NSArray*)getAllConsumptionType{ __block NSMutableArray * arr=[[NSMutableArray alloc] init]; __block FMResultSet *rs=nil; [[DBHelper sharedFMDBManager] inDatabase:^(FMDatabase *db) { NSString * sql=[NSString stringWithFormat:@"select * from ConsumptionType"]; NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; [outputFormatter setLocale:[NSLocale currentLocale]]; [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; [db setDateFormat:outputFormatter]; rs=[db executeQuery:sql]; while ([rs next]) { ConsumptionType * temp=[[ConsumptionType alloc] init]; temp.id=[rs intForColumn:@"id"]; temp.name=[rs stringForColumn:@"name"]; temp.level=[rs intForColumn:@"level"]; temp.creatdate=[rs dateForColumn:@"creatdate"]; [arr addObject:temp]; } }]; return arr; }