[英]How to create a Ruby DateTime from existing Time.zone for 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
以使其处于正确的时区? 我知道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)")
如果先前设置了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)
您可以使用以下代码使用所需的TimeZone
创建DateTime
对象。
DateTime.new(2013, 6, 29, 10, 15, 30).change(:offset => "+0530")
更新 :使用
新的
1.9.1版本的
Rails
Ruby,下面的代码就像魔术一样完成同样的工作。
DateTime.new(2013, 6, 29, 10, 15, 30, "+0530")
文档在这里
DateTime.new
从ruby 1.9.1开始接受可选的offset参数(作为第七个)
我们可以写
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.