Ios 存储日期组件而不是日期

Ios 存储日期组件而不是日期,ios,swift,design-patterns,database-design,model,Ios,Swift,Design Patterns,Database Design,Model,例如,我的应用程序可以让人们记录他们看的电影。每个记录的电影通常都有日期,有时也有时间。有一个但没有另一个是很正常的。1984年的某个时候,我看了一个小飞象,有时只是一年,但实际上可以是天/月/年/时间的任意组合 我习惯于在我的应用程序和后端中将日期建模为日期对象。但是单独存储每个组件是可行的方法吗?当我需要引用组件的实际日期时,例如,为了对日志进行排序,这将在客户端生成,或者可能存储为派生属性sortDate,并在任何组件更改时更新 我的保留意见是,用户保存的信息确实是一个“时刻”,我必须自己

例如,我的应用程序可以让人们记录他们看的电影。每个记录的电影通常都有日期,有时也有时间。有一个但没有另一个是很正常的。1984年的某个时候,我看了一个小飞象,有时只是一年,但实际上可以是天/月/年/时间的任意组合

我习惯于在我的应用程序和后端中将日期建模为日期对象。但是单独存储每个组件是可行的方法吗?当我需要引用组件的实际日期时,例如,为了对日志进行排序,这将在客户端生成,或者可能存储为派生属性sortDate,并在任何组件更改时更新

我的保留意见是,用户保存的信息确实是一个“时刻”,我必须自己处理一些事情——例如,我的组件相对于哪个时区存储?这将作为真实日期对象的一部分自动捕获

另一种选择似乎是假设缺少组件的某种“默认值”,例如,如果没有年份,则为0000年;如果没有时间,则为00:00。但这些默认值是有意义的,我无法将它们与“未提供”区分开来

这种方法的局限性和/或缺陷是什么?有没有人有过这样的约会建模经验


如果有任何影响,我的应用程序是用Swift编写的iOS应用程序,并使用解析服务器后端

在法律体系中,我成功地使用问号来表示不明确和未知的时间戳部分。试着记住,你真的不是建模日期,这里的“1984”不是日期;你在模拟关于日期的事实

因此,如果您的一个用户在1984年的某个时间看过一部电影,您可能会记录值'1984-??-??:??'在数据库的文本列中。像这样的价值观是明智的


。关于这个答案的评论也值得一读。

我不确定这是个好主意。最好设计一系列结构,提供所需的功能,并且能够提供日期值,或者如果需要DateComponents,或者更好,我想这就是我或多或少的建议——在iOS中,我们有DateComponents,可以选择存储任何这样的组件,或者任何可以为零的组件。如果我没有理解你的观点,请告诉我——我不是100%正确地理解了“结构系列”吗?我想,我会避免将DateComponents作为一种存储机制,而不是依赖一个或多个可以更可靠地描述数据的结构。比如年、日期、日期和时间,你可以围绕它做出更好、更明确的决定——但这只是意味着,我用“日期组件”来表示“日期的组件”,而不是具体的日期组件。是的,一个专门构建的容器可能就是实现。啊,抱歉我的困惑,这是一个很好的表达方式——我不是在时间点上建模一个真实的日期。谢谢你的链接。我现在正在使用单独的整数组件测试一个版本,因为我不会直接显示存储的值——如果没有day组件,我将显示类似于“2000年9月”的内容。