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;
}
时间: 2024-11-09 03:22:15

FMDB读取Datetime类型值为1970的问题的相关文章

当碰到unix纪元问题时strtotime怎么转时间戳(DateTime类的使用方法)

UNIX纪元时间又称POSIX时间/新纪元时间(Epoch Time):从协调世界时1970年1月1日0时0分0秒起到现在的总秒数,不包括闰秒.正值表示1970以後,负值则表示1970年以前. Unix 2038 bug(Y2K38漏洞) 又称 Unix Millennium Bug,此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言.一个整型的变量所能保存的最大时间为 2038 年01月19 日 03:14:07.超过这个时间后,整型数值将会溢出.

response的contentType的类型值Response.ContentType

MIME类型的含义 MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开.多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式. MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器.服务器会将它们发送的多媒体数据的类型告诉浏览器

string类;math类;datetime类

String类: .Length 字符的长度 .Trim() 去掉开头以及结尾的空格 .TrimStart() 去掉字符串开头的空格 .TrimEnd() 去掉字符串后面的空格 .ToUpper() 全部大写 .ToLower() 全部小写 Substring(起始位置,截取长度) Substring(起始位置) 只写起始位置,可以截取到尾 身份证截取生日 IndexOf("字符串") 返回第一次出现此字符串的索引 LastIndexOf("字符串") 返回最后一次

PHP使用DateTime类做时间日期到字符串转换

PHP关于时间日期的处理不是很规范,简单就简单了,就是不知道输入的字符串是否能够正确转化为需要的DateTime类型. 面向对象的PHP应该使用DateTime类来做string和dateTime的转换 从字符串到时间类型DateTime::createFromFormat(‘m/d/Y H:i','03/01/2008 02:20'); $totalPrice=0.0;从DateTime到字符串$datetime = new DateTime('2008-08-03 14:52:10');ec

使用Marshal.Copy把Txt行数据转为Struct类型值

添加重要的命名空间: using System.Runtime.InteropServices; 先建立结构相同(char长度相同)的Struct类型用于转换: [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct Employee { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public char[] EmployeeId; [MarshalAs(Unmana

[转]C# JSON格式的字符串读取到类中

将JSON格式的字符串读取到类中 本例中建立JSON格式的字符串json,将其内容读取到Person类中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Json.dll using Newtonsoft.J

string、math、random、datetime类

1.string类 变量.Replace("想要替换掉的字符或字符串","转换后的字符或字符串");//替换 练习:判断邮箱格式是否正确            1.有且只能有一个@            2.不能以@开头            [email protected]之后至少有一个.            [email protected]和.不能靠在一起            5.不能以.结尾 2.math类 3.random随机数类 初始化  实例化 

类之string类、Math类、DateTime类

String类 string a = "abcdef123456"; 注:字符串的长度是从0开始计数的如:0,1,2,3,4,5,6,7,8,9........ a.Length;     是一个属性,代表字符串的长度 ★a[2];     a代表字符串中a打头,2代表在字符串中的位置,从0开始数,[]是索引号,a[2]输出结果是c a=a.Trim();     去除左右两边的空格 ,不能去除字符串里面的空格★a=a.TrimStart();     去掉左边的空格a=a.TrimE

运用with3函数引证类型值(目标)引证类型

现在现已发展为一门强壮的编程言语.javascript开端用于做客户端的输入验证.完好的javascript完结包含(中心:ECMA Script,文档目标模型DOM,浏览器目标模型BOM?如右图.? 1dom创建了文档的树形结构图.凭借dom供给的api开发人员可以轻松地删去,增加和修正任何节点. 2bom处置浏览器窗口和结构,以及一些拓展:弹出新浏览器窗口,移动缩放和封闭浏览器窗口,供给浏览器详细信息的navig目标...1.几个javascriptECMA Script语法:1for-in