Iphone 如何在sqlite中创建时间戳字段,以便正确初始化带有NSDate字段的核心数据对象?

Iphone 如何在sqlite中创建时间戳字段,以便正确初始化带有NSDate字段的核心数据对象?,iphone,objective-c,ios,sqlite,core-data,Iphone,Objective C,Ios,Sqlite,Core Data,在阅读了关于预构建sqlite数据库以供核心数据使用的内容之后,我仍然停留在datetime列上。我已经交叉张贴了我的问题,试图得到一些帮助,因为我被困在这个问题上 我的应用程序以只读方式使用预构建的数据库,它是一个运输应用程序,数据源是计划数据。日期采用以下格式(来自数据提供商):“20110223”(将写为“2011年2月23日”)。我一直在查看有关iPhone参考日期2001的帖子和评论,并在插入sqlite之前根据秒的增量调整日期/时间值。我的导入器脚本定义了一个时间戳列来存储秒的增量。

在阅读了关于预构建sqlite数据库以供核心数据使用的内容之后,我仍然停留在datetime列上。我已经交叉张贴了我的问题,试图得到一些帮助,因为我被困在这个问题上

我的应用程序以只读方式使用预构建的数据库,它是一个运输应用程序,数据源是计划数据。日期采用以下格式(来自数据提供商):“20110223”(将写为“2011年2月23日”)。我一直在查看有关iPhone参考日期2001的帖子和评论,并在插入sqlite之前根据秒的增量调整日期/时间值。我的导入器脚本定义了一个时间戳列来存储秒的增量。存储后的列示例为“319766400”

以下是Ruby的一个片段,作为我的脚本的示例:

>> delta_seconds = Time.parse("20110223") - Time.local(2001, 1, 1, 0, 0, 0)
=> 320112000.0
>> Time.at(delta_seconds)
=> Fri Feb 22 19:00:00 -0500 1980
请注意,从delta_秒(time.at(delta_秒))中查询时间表示一年中正确的一天(2月22日),但在1980年,即纪元后10年,这似乎是正确的。在核心数据中,我将映射到此DB字段的model属性定义为“NSDate”。但是,当我启动模拟器并检查调试器时,对于每个对象,我要求输入NSDate字段(start_date),如下所示:[object valueForKey:@“start_date”],这给了我“2001-08-21 18:10:19 GMT”。换句话说,它似乎没有读取delta seconds值。如果是这样的话,我希望它在本例中应用“10年的时间”,并给出“2011年”的日期

你能看出我做错了什么吗?对可能的修复有什么建议吗?谢谢(iOS 4.1核心数据)


:是否有人可以从核心数据读取的sqlite数据库中发布一个值,该值来自打算作为NSDate字段源的列?我的数据库中的一个示例值是
320371200
,它似乎不起作用。

核心数据架构未记录,因此可以在没有警告的情况下更改。不能保证一年前文章中的模式仍然是今天使用的模式

虽然,将现有SQL数据库的模式转换为核心数据使用的模式似乎是最简单的解决方案,但实际上这是一个相当困难和脆弱的解决方案

更好的方法是使用数据模型和主应用程序中的任何类编写一个小型实用程序应用程序。然后导入现有SQL并从该数据创建核心数据对象和图形。然后从实用程序应用程序中获取DB并坚持使用release应用程序


它不再需要更多的时间,您的模式是最新的,可以升级而不用担心

核心数据架构未记录,因此可以在没有警告的情况下更改。不能保证一年前文章中的模式仍然是今天使用的模式

虽然,将现有SQL数据库的模式转换为核心数据使用的模式似乎是最简单的解决方案,但实际上这是一个相当困难和脆弱的解决方案

更好的方法是使用数据模型和主应用程序中的任何类编写一个小型实用程序应用程序。然后导入现有SQL并从该数据创建核心数据对象和图形。然后从实用程序应用程序中获取DB并坚持使用release应用程序


它不再需要更多的时间,您的模式是最新的,可以升级而不用担心

总的来说,我明白你的意思,但sqlite实际上只是将列存储为字符串,所以我只是在寻找一个示例,说明有人如何将日期、日期时间或时间戳存储在sqlite列中,以便核心数据能够读取它。基本上,我已经用我能想到的大多数方式格式化了数据列,这让我觉得我在做其他错误的事情。在这一点上,创建实用程序应用程序来获取字符串似乎不值得花费几个小时的工作。我确实创建了实用程序应用程序,并没有那么糟糕。核心数据启动,列为
TIMESTAMP
类型。我通过实体创建了一条记录,并对其调用了save。使用应用程序数据库的sqlite控制台,我看到一个值
320443387.762098
。使用Ruby控制台
Time。在(320443387.762098)
上,我得到了
Tue Feb 26 15:03:07-0500 1980
,这正是我所期望的。完成上述所有操作并确保重置iPhone模拟器数据,我能够让NSDate按预期解析列。NSPredicate数据比较仍然失败,这是我沿着这条路径开始的方式,但这是一个单独的问题。谢谢我应该提到的是,核心数据模式没有文档记录,因此可能会在不另行通知的情况下进行更改。如果你自己生成,系统更新可能会破坏你的数据库。一般来说,我明白你的意思,但sqlite实际上只是将列存储为字符串,所以我只是想举一个例子,说明有人如何在sqlite列中存储日期、日期时间或时间戳,以便核心数据能够读取它。基本上,我已经用我能想到的大多数方式格式化了数据列,这让我觉得我在做其他错误的事情。在这一点上,创建实用程序应用程序来获取字符串似乎不值得花费几个小时的工作。我确实创建了实用程序应用程序,并没有那么糟糕。核心数据启动,列为
TIMESTAMP
类型。我通过实体创建了一条记录,并对其调用了save。使用应用程序数据库的sqlite控制台,我看到一个值
320443387.762098
。使用Ruby控制台
Time。在(320443387.762098)
上,我得到了
Tue Feb 26 15:03:07-0500 1980
,这正是我所期望的。完成上述所有操作并确保重置iPhone模拟器数据,我能够让NSDate按预期解析列。NSPredicate数据比较仍然失败,这是我沿着这条路径开始的方式,但这是一个单独的问题。谢谢我应该提到核心数据