时间会涉及三部分: 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国际化.