如何从现有的时间创建一个Ruby DateTime.Rails区域



我有用户在Ruby on Rails网站上输入日期。我用如下方式将日期解析为DateTime对象:

date = DateTime.new(params[:year].to_i, params[:month].to_i, params[:day].to_i, params[:hour].to_i, params[:minute].to_i)

date = DateTime.parse(params[:date])

两个DateTime而不是在我之前设置的用户时区中,如:

Time.zone = "Pacific Time (US & Canada)"

如何解析上述DateTime s以使其处于正确的时区?我知道DateTime.new方法有第7个参数用于时间偏移。是否有一种简单的方法来查找给定时间内时区的偏移量?或者我应该使用DateTime以外的东西吗?

尝试:

Time.zone = "Pacific Time (US & Canada)"
Time.zone.parse('8-11-2013 23:59:59') #=> Fri, 08 Nov 2013 23:59:59 PST -08:00 

Time.now.in_time_zone("Pacific Time (US & Canada)")

DateTime.now.in_time_zone("Pacific Time (US & Canada)")

您可以使用下面的代码创建一个DateTime对象和您想要的TimeZone

DateTime.new(2013, 6, 29, 10, 15, 30).change(:offset => "+0530")

在Ruby v1.9.1中,下面这行像魔术一样完成了同样的工作。

DateTime.new(2013, 6, 29, 10, 15, 30, "+0530")
这里的

文档

如果您之前设置了Time.zone,则可以使用Time.zone.local:

user_time = Time.zone.local(params[:year].to_i, params[:month].to_i, params[:day].to_i, params[:hour].to_i, params[:minute].to_i, 0)

查看ActiveSupport::TimeWithZone文档

DateTime.new接受可选的offset参数(作为第七个)从ruby 1.9.1开始

我们可以写

DateTime.new(2018, 1, 1, 0, 0, 0, Time.zone.formatted_offset)

如果你已经有了一个正确的DateTime对象,名称为' DateTime ',并且你想复制它,你可以简单地调用'getutc',然后使用'in_time_zone'

DateTime.new(datetime.getutc.year, datetime.getutc.month, datetime.getutc.day, time.getutc.hour, time.getutc.min).in_time_zone

相关内容

  • 没有找到相关文章

最新更新