Convert UTC to local time in Rails 3
在Rails 3中,我无法将UTC
假设
更准确地说,我想打印"3月14日星期一上午9点",如果时间与美国东部夏令时上午9点相对应,则打印"3月14日星期一上午9点",如果时间是上星期一东部夏令时上午9点,则打印"3月7日星期一上午9点"。
希望还有别的办法?
编辑:我首先认为"edt"应该是可识别的时区,但"edt"不是实际的时区,更像是时区的状态。例如,要求
1 2 3 4 | > moment = Time.now.utc => 2011-03-14 15:15:58 UTC > moment.localtime => 2011-03-14 08:15:58 -0700 |
更新:如果你想转换到特定的时区而不是你自己的时区,你就走对了。然而,与其担心东部时间与东部时间的对比,只需在东部一般时区通过——它将根据当天的情况知道是东部时间还是东部时间:
1 2 3 4 | > 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 |
Rails有自己的名字。与他们见面:
1 | rake time:zones:us |
您还可以为所有时区运行
因此,要转换为EST,自动满足DST:
1 | Time.now.in_time_zone("Eastern Time (US & Canada)") |
我相信,Basecamp实际上有一个很好的gem叫做
https://github.com/basecamp/localu时间
使用系统本地区域很容易配置它,就在你的应用程序中。rb添加这个
1 | config.time_zone = Time.now.zone |
然后,Rails应该在您的本地时间中显示时间戳,或者您可以使用类似于此指令的东西来获取本地时间。
1 | Post.created_at.localtime |
如果你只是因为你想得到用户的时区,那么你所要做的就是改变你的时区。
这样地:
默认情况下,Rails将以UTC格式保存时间记录,即使您指定了当前时区。
1 | config.time_zone ="Singapore" |
所以这就是你所要做的,你很高兴去。
不知道为什么,但在我的例子中,它并不像以前提出的那样有效。但它是这样工作的:
1 | Time.now.change(offset:"-3000") |
当然,你需要将EDCOX1值4的值改为你的值。