FMDB讀取Datetime類型值爲1970的問題

1.問題

      今天使用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

2.正確的代碼樣例

/**
 *  獲取全部的消費分類
 *
 *  @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;
}
相關文章
相關標籤/搜索