时间存储策略
时间会涉及三部分: Linux系统时间, APP 时间, 数据库时间. 北京在东八区, 本地时间由 UTC 时间 +8 小时.
最简单的处理是使用时间戳, 不包含时区信息, 由前端使用时格式化显示. *优点: 方便插入. *缺点: 无法使用 DB 提供的时间函数; 不直观.
Rails 推荐的做法是存储一律使用 UTC, 使用时根据 zone 显示.
设置:
# config/application.rb
config.time_zone = 'Beijing'
插入:
activated_at: Time.zone.now
显示:
<%= @user.created_at.localtime.to_s(:db) %>
<%= @user.created_at.localtime.strftime('%F %T') %>
<%= @user.created_at.localtime.strftime('%Y-%m-%d %H:%M:%S') %>
必要的时候还可以配合i18n国际化.