FMDB读取Datetime类型值为1970的问题

时间:2023-03-09 20:51:38
FMDB读取Datetime类型值为1970的问题

1.问题

今天使用FMDB做一个例子程序,新建的一张表有一个datetime字段,数据库有默认值,大概如下

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 这种方式读取到的时间一直不对

,后来我把它读取成字符串,

     temp.creatdate=[rs stringForColumn:@"creatdate"];//这样是读取出来了正确的时间

这就说明数据库存取是正确的,只是再读取的时候出了问题,点进源码去看发现

FMDatabase类有一个NSDateFormatter属性,但它为空的时候,会采用默认的解析时间类型

所以想正确处理datetime 类型的数据时就需要传一个NSDateFormatter给db,这样就可以获取到

正确的值。

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;
}

相关文章