在 Rails 中将本地时间转换为 UTC

Posted

技术标签:

【中文标题】在 Rails 中将本地时间转换为 UTC【英文标题】:Convert local time to UTC in Rails 【发布时间】:2012-08-03 17:28:46 【问题描述】:

在我的 mysql 数据库中,updated_at 字段被存储为 UTC。上周在美国东部时间晚上 7 点输入了一条记录,它的 updated_at 值为“2012-08-01 23:00:00”。我正在尝试将 Web 客户端的本地时间转换为可以与数据库中的 updated_at 字段进行比较的 UTC。

例如,我想将 '08/01/2012 07:00 pm' 转换为 '2012-08-01 23:00:00' (考虑到我在 EDT),但我不见了转换的时区方面。 '7:00 pm' 是当地时间,可以来自任何时区。我当前的代码:

ruby-1.9.2-head :015 > from_date = DateTime.strptime('08/01/2012 07:00 pm', '%m/%d/%Y %H:%M %p')
=> Wed, 01 Aug 2012 19:00:00 +0000 
ruby-1.9.2-head :016 > from_date = Time.zone.parse(from_date.to_s).utc
=> 2012-08-01 19:00:00 UTC

有什么想法吗?

编辑:另外,我可以在我的 strptime 调用中使用“%Z”,但这是假设我在值中有时区,而我目前没有。我想我可以使用 javascript 将其与日期/时间值一起发送。

【问题讨论】:

这会帮助你吗? ***.com/questions/4820819/… 【参考方案1】:

首先我会检查您的时区设置。

在您的 environment.rb (Rails 2) 或 application.rb (Rails 3) 文件中,您可以设置默认时区:config.time_zone = 'Eastern Daylight Time (EDT)'

其次,我会查看此帖子以获取满足您需求的信息、指导和提示:http://databasically.com/2010/10/22/what-time-is-it-or-handling-timezones-in-rails/

【讨论】:

我没有明确设置时区,所以它默认为 UTC。如果我现在将其更改为默认为 EDT,那会影响已经存储在数据库中的数据吗? 这基本上是正确的,只是它不是一个有效的时区。那是一个时间标准。 "Hawaii", "Alaska", "Pacific Time (US & Canada)", "Arizona", "Mountain Time (US & Canada)", "Central Time (US & Canada)", "Eastern Time (US & Canada)", "Indiana (East)"【参考方案2】:

UTC 本地化

created_at.utc

UTC到本地

created_at.localtime

【讨论】:

以上是关于在 Rails 中将本地时间转换为 UTC的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中将 UTC 日期转换为本地时间

在 iOS 中将 UTC 日期时间转换为本地日期时间

无法在模板中将 UTC 时间戳转换为本地时间

在填充的数据表中将 datetime 列从 utc 转换为本地时间

烧瓶:将UTC时间转换为用户的本地时间

IOS将UTC转换为本地时间不准确