代码之家  ›  专栏  ›  技术社区  ›  Adam Lassek

在Rails中处理可选时间信息的正确方法是什么?

  •  3
  • Adam Lassek  · 技术社区  · 14 年前

    我正在开发一个Rails应用程序,它允许用户定义任务,这需要 due_date . 这个 可能包括也可能不包括时间。

    我们现在处理这件事的方式让人感觉像是黑客。 到期日 默认为12:00 AM,在这种情况下,我们不显示时间。这个 DateTime 据我所知,对象不允许空时间值。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Larry K    14 年前

    由于您的数据结构需要适应有时间和无时间的日期,因此有两种选择:

    使用带有标志值的Ruby DateTime对象

    例如,将“2010年1月1日”解析为日期时间将为您提供2010年1月1日00:00。

    否则,您需要发明自己的数据结构。 最简单的可能是一个带有DateTime和“show\u time”布尔标志的类。-通过使用DateTime保存时间,您将能够使用DateTime输出方法,并在需要时使用它们进行算术运算。

    创建一个新的数据结构在Ruby中并不是什么大事,但是如果你没有午夜到期的任务,我推荐方法1。注意,你可能希望打印它们而不需要时间,因为这是任务定义者所要求的。或者可以在输出中包含“(任何时间)”。

    附言

    小心时区!处理的方法很多,但你一定要慎重选择一种。

        2
  •  1
  •   bjg    14 年前

    拆分属性可能会非常复杂。为什么不通过一个公约,如果没有规定时间,那么默认为午夜或中午的日期问题?除非您需要能够区分这两种情况,即这是午夜,因为它是明确指定的,或者这是午夜,因为没有指定时间。如果是后者,那么拆分它们可能是明智的,或者只是添加一个布尔值来消除歧义。

    如果你认为你有一个分离的日期和时间的进一步使用,并将花费大量的能量分裂为一个单一的领域为其他原因,那么这也可能会争论分裂。