cocoa – 如何在Core Data中无时间存储日期

cocoa – 如何在Core Data中无时间存储日期,第1张

概述我一直试图找到一种在iPhone上使用Core Data存储日常数据的合理方法. 我的应用程序以csv格式接收数据,但是没有时间: date, cycles2009-08-01, 1232009-08-02, 2342009-08-03, 3452009-08-04, 456 存储此数据时,每天只应有一条记录.我认为最好的办法是创建一个要存储的NSDate,但要删除时间&时区数据. 我可以 我一直试图找到一种在iPhone上使用Core Data存储日常数据的合理方法.

我的应用程序以csv格式接收数据,但是没有时间:

date,cycles2009-08-01,1232009-08-02,2342009-08-03,3452009-08-04,456

存储此数据时,每天只应有一条记录.我认为最好的办法是创建一个要存储的NSDate,但要删除时间&时区数据.

我可以使用NSDateComponents或NSDateFormatter轻松创建一个没有小时,分钟或秒的NSDate.但是,即使我将时区显式设置为UTC或从GMT设置为零秒,使用NSLog()输出创建的日期始终具有我的本地时区,如:

2009-07-29 00:00:00 +0100

有没有人知道更好的方法来制作没有时间组件的NSDates?或者也许是存储日期的更好方法?

解决方法 一个好的编程经验法则是始终以UTC格式存储日期.无论您是否使用核心数据都无关紧要;你仍然需要做一些工作,因为Apple的日期课程非常糟糕.

日期在内部表示为自参考日期以来的秒数,我相信,2001年1月1日00:00:00(尽管实际参考日期不是很重要).重点是,NSDate对象始终以UTC为原生.如果您在CSV文件中获得的日期是本地日期,则需要执行以下 *** 作以获取UTC时间:

NSDate *UTcdate = [localDate addTimeInterval:-[[NSTimeZone localTimeZone] secondsFromGMT]];

然后,我将时间设置为00:00:00.现在,您将在午夜以UTC格式保存日期.出于演示目的,您将使用配置了您选择的时区的NSDateFormatter(如果您未指定系统时区,则默认为系统时区)以显示这些日期.

但是,当你刚刚处理日期时,时区并不重要.只要您确保将NSDateFormatter上的时区设置为UTC,无论用户在其设备上选择了哪个时区,您都将始终显示相同的日期.

如果您不喜欢此解决方案,则可以始终以其他格式存储日期.您可以使用double或int以某种自定义格式存储日期(例如,自某个参考日期以来的天数),或者您甚至可以使用自己的类来按照您希望的方式对日期进行建模并将其存储为NSData目的.只要该类实现NSCoding,您就可以将其序列化为Core Data中的NSData对象.您只需将Core Data中的属性类型设置为“transformable”即可.

这里有很多选项,其中没有一个涉及编写自己的sqlite查询和数据库的工作.

总结

以上是内存溢出为你收集整理的cocoa – 如何在Core Data中无时间存储日期全部内容,希望文章能够帮你解决cocoa – 如何在Core Data中无时间存储日期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1032988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存