我正在开发一个Rails应用程序,允许用户定义需要due_date
的任务。 due_date
可能包括也可能不包含时间。
我们现在处理此问题的方式感觉就像是黑客。 due_date
默认为12:00 AM,在这种情况下,我们不显示时间。据我所知,DateTime
对象不允许空时间值。
我应该将此信息分成数据库中的两列吗?你们怎么处理这个?
答案 0 :(得分:3)
由于您的数据结构需要包含有时间和无时间的日期,因此您有两种选择:
使用带有标记值的Ruby DateTime对象来指示日期没有时间。通常的标志值为0,这意味着无法显示午夜时间。 (午夜是一天开始后的0秒。)
例如,将“2010年1月1日”解析为DateTime将为您提供2010年1月1日00:00。
否则你需要发明自己的数据结构。最简单的可能是一个带有DateTime和“show_time”布尔标志的类。 - 通过使用DateTime来保存时间,您将能够使用DateTime输出方法,并在需要时对它们进行算术运算。
在Ruby中创建一个新的数据结构并不是什么大不了的事,但是如果你可以在午夜完全没有任务,我建议使用方法1.注意你可能想要打印它们没有时间这就是任务定义者所要求的。或者您可以在输出中包含“(任何时间)”。
<强> PS 强>
留意时区!处理的方法很多,但你一定要刻意选择。
答案 1 :(得分:1)
拆分属性可能会不必要地复杂化。为什么不采用一种惯例,如果没有指定时间,则将其默认为相关日期的午夜或中午?除非您需要能够区分这两种情况,即这是午夜,因为它是明确指定的,或者这是午夜,因为没有指定时间。如果后者然后拆分它们可能是可取的,或者只是添加一个布尔值来消除歧义。
如果你认为你有进一步的使用分开的日期和时间,并且由于其他原因会花费大量能量分裂单个字段,那么这也可能会争论分裂。