【问题标题】:What is the correct type I should use to store a date up to the minute?我应该使用什么类型来存储最新的日期?
【发布时间】:2011-05-21 11:48:47
【问题描述】:

我想在我的数据库中存储事件的日期,但我想这样做而不存储有关秒或小于秒的任何信息。使用 Rails,在我的迁移中,我可以选择创建 date 列或 datetime 列,其中第一个不太准确,而第二个则太多(最多到第二个和更少)。我应该选择哪种类型来存储这样的日期?目前我正在使用datetime,并在每次在模型中设置某个日期时手动将秒数设置为固定值(例如 0)。

类似这样的:

self.date ||= Time.now.change(:sec => 0)

我完全跑题了吗?我应该只为日期的每个组成部分使用一个整数字段吗? (年、月、日等...)还是datetime 是正确的类型,但我不明白它的用途? (我认为它适用于时间戳和秒很重要的事情)

【问题讨论】:

  • 是的,datetime 是正确的类型。您唯一的其他选择是varchar 或只是一个普通的旧timestamp/int 列。但与datetime 相比,这些都有其他缺点,您仍然需要手动从值中删除秒数。

标签: ruby-on-rails database datetime date types


【解决方案1】:

datetime 是正确的类型。并确保将其存储在没有时区的 UTC 时区:

http://derickrethans.nl/storing-date-time-in-database.html

您可以选择在插入/更新时使用 SQL 触发器将日期四舍五入到分钟。它会简化你的 ruby​​ 代码。

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多