rails应用中timezones的正确用法

说明

本文参照翻译了以下博文:

The Exhaustive Guide to Rails Time Zones
作者: Alexander

正文

  • 得到当前时间

正确做法
Time.zone.now

可接受做法
Time.now.in_time_zone
DateTime.now.in_time_zone

错误做法
Time.now
DateTime.now

  • 得到日期(比如今天,昨天等)

正确做法
Time.zone.today
Time.zone.today - 1.day

可接受做法
Date.current
Date.yesterday

错误做法
Date.today

  • 生成Time(Build Time)

正确做法
Time.zone.local(2013, 3, 8, 10, 00)

错误做法
Time.new(2013, 3, 8, 10, 00)
DateTime.new(2013, 3, 8, 10, 00)

  • 从时间戳生成Time(Time from Timestamp)

正确做法
Time.zone.at(Timestamp)

可接受做法
Time.at(Timestamp).in_time_zone

错误做法
Time.at(Timestamp)

  • 解析时间(简单)

正确做法
Time.zone.parse(str)

错误做法
Time.parse(str)

  • 解析时间(按照严格格式)

正确做法
Time.zone.strptime(str, “%Y-%m-%d %H:%M %Z”)
注意:这种比较好的做法,需要引入作者自己写的gem。TimeZoneExt

可接受做法
DateTime.strptime(str, “%Y-%m-%d %H:%M %Z”).in_time_zone

错误做法
DateTime.strptime(str, “%Y-%m-%d %H:%M %Z”)

  • 日期转时间(Get Time From Date)

正确做法
date.beginning_of_day

可接受做法
date.to_time_in_current_zone

错误做法
date.to_time

注意事项

  • ruby的标准库中,比如Time和DateTime类是没有考虑时区(TimeZone)的概念在里面的。
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。
转载请注明出处 https://makeiteasy.github.io
分享到: 更多