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