将Active Support时区原始格式转换为字符串

时间:2016-04-22 04:12:29

标签: ruby-on-rails ruby activesupport

我尝试将Active Support时区原始格式转换为字符串。我想将它存储在一个字符数组中,然后分别解析每个所需的数据。

Time.zone = current_user.timezone
date_and_time = Time.zone.now

现在

date_and_time  = Thu, 21 Apr 2016 20:58:04 PDT -07:00

Ruby方法(to_s)不会转换它。我找到了将其转换为其他方法,但是所有这些方法都只会将格式更改为数字,我希望这一天保持不变,因为我会将其存储在变量中,然后在不同的方法中使用它。

3 个答案:

答案 0 :(得分:3)

您可以使用.to_formatted_s(DATE_FORMAT)

time = Time.now                    # => Thu Jan 18 06:10:17 CST 2007

time.to_formatted_s(:db)           # => "2007-01-18 06:10:17"
time.to_formatted_s(:long)         # => "January 18, 2007 06:10"
time.to_formatted_s(:long_ordinal) # => "January 18th, 2007 06:10"
time.to_formatted_s(:rfc822)       # => "Thu, 18 Jan 2007 06:10:17 -0600"
time.to_formatted_s(:iso8601)      # => "2007-01-18T06:10:17-06:00"

可在此处找到所有DATE_FORMATS列表以及更多信息: http://api.rubyonrails.org/classes/Time.html#method-i-to_formatted_s

答案 1 :(得分:1)

你可以试试这个

date_and_time.strftime("%a %d %b %Y")

此外,您可以查看此guide,以获得您想要的格式

答案 2 :(得分:1)

你应该得到你想要的东西:

date_and_time.strftime("%a %d %b %Y %H:%M:%S UTC %:z")

有关详细信息,请参阅strftime Docs

<强>解释

硬编码UTC的原因是根据文档

%z - Time zone as hour and minute offset from UTC

所以我认为它应该始终是UTC。