gpt4 book ai didi

ruby-on-rails - 是否存在 Ruby 1.8.7 time.strftime %z 错误?

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:48 26 4
gpt4 key购买 nike

我在使用 Ruby 1.8.7 strftime 时遇到问题,其中 %z 在我将时间转换为 UTC 后返回本地时间。

我正在做以下事情:

>> t = Time.now
=> Mon Dec 19 15:20:16 -0800 2011
>> t.strftime("%z")
=> "-0800"

>> t = Time.now.utc
=> Mon Dec 19 23:20:28 UTC 2011
>> t.strftime("%z")
=> "-0800"

即使在我将时间更改为 UTC 之后,格式化的时区也默认为我​​的本地 PST -0800。

这是一个已知问题吗?有办法解决吗?

最佳答案

请注意 fine 1.8.7 manual没有提到 %z:

...
%w - Day of the week (Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time
%X - Preferred representation for the time alone, no date
%y - Year without a century (00..99)
%Y - Year with century
%Z - Time zone name
%% - Literal ``%'' character

但是1.9.3 version确实记录了对 %z 的支持:

Time zone:
%z - Time zone as hour and minute offset from UTC (e.g. +0900)
%:z - hour and minute offset from UTC with a colon (e.g. +09:00)
%::z - hour, minute and second offset from UTC (e.g. +09:00:00)
%Z - Time zone abbreviation name

%z 产生任何东西的事实似乎是一个未记录且可能是意外的实现细节。

你可以在1.8.7和1.9.3中使用%Z;例如,您在 1.8.7 中得到这些结果:

>> t = Time.now
=> Mon Dec 19 16:46:06 -0800 2011
>> t.zone
=> "PST"
>> t.strftime('%z %Z')
=> "-0800 PST"
>> t = Time.now.utc
=> Tue Dec 20 00:46:27 UTC 2011
>> t.zone
=> "UTC"
>> t.strftime('%z %Z')
=> "-0800 UTC"

这将为您提供 UTC、PST、EDT 和类似的常用缩写形式的时区。如果你想要偏移量,你应该在 1.9.3 中使用 gmt_offset1.8.7 :

>> Time.now.gmt_offset
=> -28800
>> Time.now.utc.gmt_offset
=> 0

请注意,gmt_offset 以秒为单位提供偏移量。

关于ruby-on-rails - 是否存在 Ruby 1.8.7 time.strftime %z 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com