ruby-on-rails – 是否存在Ruby 1.8.7 time.strftime%z错误?
发布时间:2020-12-17 07:09:23 所属栏目:百科 来源:网络整理
导读:我遇到了 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"
我遇到了
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和1.8.7中使用gmt_offset: >> Time.now.gmt_offset => -28800 >> Time.now.utc.gmt_offset => 0 请注意,gmt_offset为您提供以秒为单位的偏移量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |