重构之前:
使用ruby中的Time,Date和DateTime这三个类,是不会按照你在application.rb文件中对config.time_zone配置的时区来显示时间的。
Time.zone = "Alaska"
Time.now
Date.today
如上代码,只会显示当地时间,而不会显示Alaska时间(除非你此刻已经在Alaska)。
重构之后:
你应该使用ActiveSupport提供的辅助方法Time.zone来获取各个时区的时间。
Time.zone.now
Time.zone.today
这一点在The Exhaustive Guide to Rails Time Zones也有很好的讲解,所以基于rails的最佳实践准则开发一个工具也不是一个难事。
时区的bug在生产环境和开发环境的服务处于不同时区的时候体现的尤为明显,使用Time.zone可以避免这种开发/生产不同导致的问题。