2010-06-30 60 views
3

我正在研究Rails应用程序,该应用程序允许用户定义需要due_date的任务。 due_date可能包含或不包含时间。在Rails中处理可选时间信息的正确方法是什么?

我们正在处理这一权利的方式,现在感觉就像一个黑客攻击。 due_date默认为12:00 AM,在这种情况下,我们不显示时间。就我所知,DateTime对象不允许空时间值。

我应该拆分此信息成数据库中的两列?你们如何处理这个问题?

+0

什么是您的数据库?它支持单独的日期/时间字段吗? – 2010-06-30 21:14:45

+0

MySQL,所以它支持日期和时间类型而不是日期时间 – 2010-06-30 21:31:30

回答

3

由于你的数据结构需要适应日期有和没有的时候,你有两个选择:

使用带有标志值一个Ruby的DateTime对象的时候,表示该日期没有一个时间。通常的标志值为0,这意味着午夜时间不能显示。 (午夜为0秒的一天开始了。)

例如,解析“2010年1月1日”变成一个DateTime会给你2010年1月1日00:00。

否则,你就需要创造自己的数据结构。最简单的可能是一个具有DateTime和“show_time”布尔标志的类。 - 通过使用DateTime来保存时间,您可以使用DateTime输出方法,并根据需要对它们进行算术运算。

创建一个新的数据结构是不是在Ruby的这样一个大问题,但如果你能活着,也不一​​定是在午夜到期的任务,我建议的方法1.请注意,你可能想要打印它们没有时间因为这是任务定义者所要求的。或者你可以在输出中包含“(任何时间)”。

PS

当心时区!有许多方法可以处理,但你应该一定要故意选择一个。

+0

如何将这些数据结构存储在Rails中? – 2011-08-31 08:27:52

+0

@Andrew,通过“存储”你的意思是存储在数据库中?您需要将其作为离散值(布尔值和日期时间)进行存储,或者将数据结构序列化为Blob /文本。对于一个小的obj,比如一个datetime和bool,存储为两个离散的val比序列化最好/最简单/更清晰。如果您想获得更多帮助,请在SO上提出一个新问题。问候。 – 2011-09-01 21:25:27

1

分割属性可能不必要的复杂。为什么不采用一个约定,如果没有指定时间,那么默认它在相关日期的午夜或中午?除非您需要区分这两种情况,即这是午夜,因为它是明确指定的,或者这是午夜,因为没有指定时间。如果后者分裂他们可能是明智的,或者只是添加一个布尔值来消歧案件。

如果你以为你已经进一步使用了分离的日期和时间,并会消耗大量的能量分裂的单场因其他原因则可能也主张分裂。

相关问题