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