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

本文讨论了在使用FMDB处理数据库时遇到datetime类型数据读取错误的问题,通过实例展示了如何正确配置NSDateFormatter来解决此问题,确保datetime数据能够被正确解析和读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

转载于:https://www.cnblogs.com/try-wyh/p/4705188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值