如何处理Rails应用程序中的时差?

时间:2011-04-23 15:04:23

标签: ruby-on-rails ruby-on-rails-3 timezone

在我的Rails应用程序中,我想将用户的last_login时间存储在数据库中。然后我想根据当地时间向用户显示last_login时间(如果用户现在在加拿大,则应为X,如果用户现在在澳大利亚则为Y)。

问题1

您如何建议处理时差?我应该在数据库中存储转换为UTC的last_login,并在显示时将其再次转换为当地时间,还是有更好的方法?

问题2

如何识别显示last_login的本地时区?

1 个答案:

答案 0 :(得分:3)

我认为你在UTC(或任何服务器时间)存储last_login_at是正确的。默认情况下,它将在该时间内存储。然后您可以将其转换为用户本地时间:

user.last_login_at.in_time_zone('Eastern Time (US & Canada)')

在Rails Api中,您可以找到有关timezonestime with zone的更多信息。

要确定用户时区,您可以使用某些GeoIP工具,例如this one(请按照说明进行操作)。但它不是100%准确的检测。要求用户在注册时选择他的时区的最可靠方式。

要收集您可以运行的所有时区:

ActiveSupport::TimeZone.all.map(&:name)