T.J*_*der 23
我不能说与MongoDB有关,但在SQL数据库中,不,这不是最佳实践.这并不意味着可能没有偶尔的用例,而是"最佳实践",没有.
将它们存储为日期,将它们检索为日期.您最好的办法是设置数据库以将它们存储为UTC(松散地,"GMT"),以便数据是可移植的,并且您可以根据需要使用不同的本地时间(例如,如果数据库由地理位置不同的用户使用) ,并处理应用层中从UTC到本地时间的任何转换(例如,通过Calendar或第三方日期库).
存储日期为数字意味着您的数据库很难对报告,对运行即席查询,等等.我犯了那个错误一次,这不是一个我重复没有真正很好的理由.:-)
这在很大程度上取决于:
第三点可能是最重要的.想想你试图存储的价值究竟是什么意思.即使您显然没有使用Noda Time,但希望我的用户指南页面根据您的输入数据选择使用哪种Noda Time类型可能会帮助您清楚地思考这一点.
如果您只使用Java,并且您的数据库对日期/时间类型没有非常好的支持,并且您只是试图表示"及时"(而不是,例如,某个特定时刻)时区,或带偏移的本地日期/时间,或只是本地日期/时间,或只是日期......),您可以轻松编写诊断工具将数据转换为更易读的形式 - 然后存储一个long是合理的.但这是一个很长的"if"列表.
如果您希望能够在数据库中执行日期操作 - 例如询问在该月的第一天发生的所有值 - 那么您应该使用日期/时间类型,在时区周围小心.(我的经验是,大多数数据库都至少令人震惊的严重记录,当谈到自己的日期/时间类型.)
通常,您应该使用能够满足您所有要求的任何类型,并且是该特定环境的最自然的表示.因此,在具有日期/时间类型的数据库中,当您与其进行交互时不会出现问题(例如,以未请求的方式执行任意时区转换),请使用该类型.它将使各种事情变得更容易.
使用更"原始"表示(例如64位整数)的优点正是数据库不会乱用它.你有效地隐藏了数据库中数据的含义,具有该方法的所有正常优点和缺点(主要是缺点).