关于 ruby?? on rails:我将如何存储可能是部分的日期(即只有年份,也可能是月份)并在以后以相同的特异性输出它?

关于 ruby?? on rails:我将如何存储可能是部分的日期(即只有年份,也可能是月份)并在以后以相同的特异性输出它?

How would I store a date that can be partial (i.e. just the year, maybe the month too) and output it later with the same specifity?

我想让用户指定一个日期,该日期可能包括也可能不包括日期和月份(但至少有年份)。问题是当它作为日期时间存储在数据库中时;缺少的日期/月份将保存为默认值,我将失去日期的原始格式和含义。

我的想法是除了 datetime 列之外,将列中的实际格式存储为字符串。然后,每当我必须为其他所有内容显示日期和日期时间时,我都可以使用字符串列。缺点是我要显示的表格中的每个日期列都有一个额外的列,并且打印本地化日期不会那么容易,因为我不能依赖日期时间值......我可能不得不解析字符串。

我希望我忽略了一些事情,并且可能有更简单的方法。

(请注意,如果它对解决方案很重要,我会使用 Rails。)


按照 Jhenzie 的建议,创建一个位掩码来显示日期的哪些部分已被指定。 1 = 年,2 = 月,4 = 日,8 = 小时(如果您决定更具体),然后将其存储到另一个字段中。

我能想到的唯一方法是使用 jhenzie 的使用位掩码的方法,然后将该位掩码存储到日期时间列的秒部分中。


在你的模型中只关注你关心的部分。因此,您可以将整个日期存储在您的数据库中,但您可以在将其显示给用户之前将其合并。


n


附加列可以简单地用于指定日期时间的哪一部分已被指定

1 = 天
2 = 月
4 = 年

所以 3 是日和月,6 是月和年,7 是三者。那时它是一个简单的 int


n


n


n


informix 数据库有这个功能。当您定义日期字段时,您还指定了所需时间的掩码


我对数据库设计知之甚少,但我认为一种简洁的方法是使用布尔列来指示用户是否输入了月份和日期(每个一列)。然后,要保存给定的日期,您将:

  • 将用户输入的日期存储在日期时间列中;
  • 如果用户选择了一个月,则设置布尔月份列;
  • 如果用户选择了一天,则设置布尔日列。
  • 这样您就知道可以信任日期时间的哪些部分(即用户输入的内容)。

    编辑:这也比拥有一个带有神秘值的 int 字段更容易理解!


    我可能会存储日期时间和一个额外的"精度"列来确定如何输出它。对于输出,精度列可以映射到包含相应格式字符串("YYYY-mm"等)的列,也可以包含格式字符串本身。


    真的有必要将它存储为日期时间吗?如果未将其存储为字符串 2008 或 2008-8 或 2008-8-1 - 在将其拉出时将字符串拆分为连字符,您就可以确定原始输入的具体程度


    推荐阅读