Ruby strftime'%Z'方法返回'0545'而不是'NPT'

Sus*_*shi 8 ruby macos ruby-on-rails

将MacOS升级到最新版本后,我对Time#strftime方法有一些奇怪的问题.

Time.now.in_time_zone("Kathmandu").strftime("%Z") #=> '+0545'
Time.now.in_time_zone("Bangkok").strftime("%Z") #=> '+07'
Time.now.in_time_zone("Nairobi").strftime("%Z") #=> 'EAT'
Time.now.in_time_zone("New Delhi").strftime("%Z") #=> 'IST'
Run Code Online (Sandbox Code Playgroud)

我目前的ruby版本是:

ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
Run Code Online (Sandbox Code Playgroud)

我试过了:

ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
Run Code Online (Sandbox Code Playgroud)

仍然没有工作

我在我朋友的机器上试过这个(ruby 2.4.1p111(2017-03-22修订版58053)[x86_64-darwin15])并且工作正常.

Time.now.in_time_zone("Kathmandu").strftime("%Z") #=> 'NPT'
Time.now.in_time_zone("Bangkok").strftime("%Z") #=> 'ICT'
Time.now.in_time_zone("Nairobi").strftime("%Z") #=> 'EAT'
Time.now.in_time_zone("New Delhi").strftime("%Z") #=> 'IST'
Run Code Online (Sandbox Code Playgroud)

孙悟空*_*孙悟空 0

您可以创建一个转换器,将数字时区偏移量转换为缩写名称。定义一个哈希常量,例如

{
... 
'+0200' => 'CEST',
'+0530' => 'IST',
...
} 
Run Code Online (Sandbox Code Playgroud)

清单完整