我有一个这种格式的日期字符串yyyy-mm-ddThh: mm: ss [Z] .
我有一个时区字符串。例如"Asia/Kolkata"
现在我想把这个日期字符串转换成给定时区的时区
例如,如果日期是2014-01-03T23:30:00Z,那么在"Asia/Kolkata"时区,它将是2014-01-04T05:00:00。
我尝试使用时间库,但时间库似乎没有任何方法可以转换到其他时区http://ruby-doc.org/core-1.8.6/Time.html#method-c-mktime .
你应该使用TZInfo gem。
require 'tzinfo'
tz = TZInfo::Timezone.get('Asia/Kolkata')
utc = DateTime.iso8601('2014-01-03T23:30:00Z')
local = tz.utc_to_local(utc)
如果它只是一个没有rails的ruby项目,你也不想安装第三方的gem。然后你必须自己做,下面是我所做的:
def convert_time_to_timezone(time, timezone)
timezone_in_hours = timezone.to_i
time_in_seconds = time.to_i
time_in_seconds_in_timezone = time_in_seconds + timezone_in_hours*3600
utc_time = Time.at(time_in_seconds_in_timezone).utc
Time.new(utc_time.year, utc_time.month, utc_time.day, utc_time.hour, utc_time.min, utc_time.sec, "#{timezone}:00")
end
只提供时间(例如,time .now)和时区(例如,"+11:00"或"-05:00")它将返回具有指定时区的时间。例子:调用convert_time_to_timezone(Time.now, "+11:00")
,它将返回类似
2017-05-31 18:17:13 +1100
如果安装了rails,那么可以直接调用in_time_zone('"Central Time (US & Canada)"')