首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Rails 3中将UTC转换为本地时间

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

Stack Overflow用户
提问于 2011-03-14 23:11:10
回答 6查看 108.8K关注 0票数 98

在Rails3中将UTC TimeTimeWithZone转换为本地时间时遇到了问题。

假设moment是UTC中的某个Time变量(例如moment = Time.now.utc)。如何将moment转换为我的时区,以处理夏令时(即使用美国东部夏令时/美国东部夏令时)?

更准确地说,如果时间对应于美国东部时间今天上午9点,我想打印出“星期一3月14日上午9点”,如果时间是美国东部时间上周一上午9点,我想打印出“星期一3月7日上午9点”。

希望还有另一种方法?

编辑I first thought认为"EDT“应该是可识别的时区,但"EDT”不是实际的时区,更像是时区的状态。例如,请求Time.utc(2011,1,1).in_time_zone("EDT")是没有任何意义的。这有点令人困惑,因为"EST“是一个实际的时区,用于一些不使用夏令时的地方,并且(-5)长达一年。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-14 23:23:10

Rails有自己的名字。通过以下方式查看它们:

代码语言:javascript
复制
rake time:zones:us

您还可以为所有时区运行rake time:zones:all。要查看更多与区域相关的rake任务:rake -D time

因此,要自动转换为EST,以满足DST的需求:

代码语言:javascript
复制
Time.now.in_time_zone("Eastern Time (US & Canada)")
票数 116
EN

Stack Overflow用户

发布于 2011-03-14 23:16:38

Time#localtime将为您提供运行代码的机器当前时区的时间:

代码语言:javascript
复制
> moment = Time.now.utc
  => 2011-03-14 15:15:58 UTC 
> moment.localtime
  => 2011-03-14 08:15:58 -0700 

更新:如果您想转换到特定时区,而不是您自己的时区,那么您的选择是正确的。但是,不用担心EST和EDT,只需传入一般的东部时区--它将根据日期知道是EDT还是EST:

代码语言:javascript
复制
> Time.now.utc.in_time_zone("Eastern Time (US & Canada)")
  => Mon, 14 Mar 2011 11:21:05 EDT -04:00 
> (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)")
  => Sat, 14 Jan 2012 10:21:18 EST -05:00 
票数 122
EN

Stack Overflow用户

发布于 2016-10-28 08:03:25

使用您的系统本地区域配置它很容易,只需在您的application.rb中添加以下内容

代码语言:javascript
复制
config.time_zone = Time.now.zone

然后,rails应该向您显示本地时间中的时间戳,或者您可以使用类似下面的指令来获取本地时间

代码语言:javascript
复制
Post.created_at.localtime
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5300493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档