我正在开发我的第一个使用Core Data的mac应用程序。由于我没有太多的软件开发经验,我想问更有经验的开发人员以下问题:
在某些表单中输入数据时,用户必须在几个表单中输入日期。由于应用程序将在应用程序商店中,并且来自不同大陆的人们将下载它(我希望如此(,我正在考虑允许用户从应用程序中的首选项面板中选择他喜欢的日期格式。
但我想知道如果在输入 500 条或更多记录后,他决定再次更改日期格式会发生什么?这最终会导致核心数据混乱吗?
这是个好主意还是我应该保持简单,只获取系统日期(用户计算机日期格式(并使用该日期格式? 你会怎么做?任何建议将不胜感激。
我的建议是将日期保留为时间间隔。您可以看到NSDate的此类方法。
The interval between the date object and 00:00:00 UTC on 1 January 1970.
因此,如果您从 NSDatFormatter 对象获取 NSDate 对象,您将能够获得自 1970 年以来以秒为单位的时间。您可以将此值存储在核心数据中,并在以后使用它来创建 NSDate 对象。您将能够将其用于不同的区域设置和时区,并使用正确的格式。"日期">是一个复杂的话题,我建议您阅读有关日期和日期格式化程序的指南。
首先是决定如何存储日期。这里的答案是作为 NSDate。NSDate 是一个唯一的精确时间点,因此它在某种意义上存储日期和时间。
这意味着,例如,柏林的下午 1 点和吉隆坡的晚上 8 点将是完全相同的 NSDate 值(在冬季(,但伦敦下午 2 点和巴黎下午 2 点相同的日历日期将不是相同的 NSDate 值。这是一个相当复杂的主题,请阅读Apple的日期和时间编程主题文档。
然后,正如您所说,您需要允许用户输入日期。执行此操作的方法是使用绑定到输入控件的 NSDateFormatter。格式化程序可以定义为根据系统设置,这意味着您将免费获得所需的本地化,因此这实际上很容易。
您真正面临的棘手问题是确定您真正要存储的内容,如果它只是日历日期而没有您要存储的相关时间。例如,您决定将日期与中午 12:00 合并存储在本地时区中。然后,如果用户转移到另一个时区超过 12 小时,则日期可能会显示为上一个日期或下一个日期。最安全的方法是将日期与格林威治标准时间中午 12:00 存储在一起,因为这位于时区范围的中间。无论如何,有一些13小时和14小时的地方可能会表现出上述问题,但这些都是太平洋上的小环礁,可以安全地忽略。
然而,最好的办法是,如果你实际上可以确定你想要存储的内容实际上是一个精确的时间点,而不是一个日期(这是一个24小时的模糊定义(。例如,在日历应用中,事件通常在特定日期的特定时间发生,然后存储该时间和日期。