2017-02-18 11 views
0

私はここで非常に単純なものを見逃しているように感じます。短縮されたタイムゾーン(たとえば、)を返すと、は%Zとなります。これはTimeオブジェクトでは行いますが、DateTimeオブジェクトでは行いません。DateTime.strftimeとTimezone略語のTime.strftimeの出力が異なります

私には何が欠けていますか?

irb(main):008:0> Time.now.strftime("%Z") 
=> "PST" 
irb(main):009:0> DateTime.now.strftime("%Z") 
=> "-08:00" 

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

答えて

1

ビットは不明DateTime#strftimeのドキュメント:

%Z - タイムゾーンの略称名または似たような情報。

両方の方法でオフセットを表示できるように、DateTimeに数値が表示されます。略称を取得するためには、明示的TimeDateTimeオブジェクトをキャストする必要があります

▶ DateTime.now.to_time.strftime("%Z") 
#⇒ "CET" 
+0

ありがとうございます - これはドキュメントの問題であるか、機能が不明です訴える。私はチケットをオープンしました:https://bugs.ruby-lang.org/issues/13231 – thornomad

+0

正直なところ、別の '%'を追加することなく両方のオフセットを表示できるように、マッパー。 – mudasobwa

1

がいくつかあります -

DateTime.now

はあなたのDateTimeクラスのオブジェクトを提供します。また、私はDateTime class Docを行って、%Zをターミナルでチェックしましたが、動作しません。

mudasobwaと同じように、to_timeメソッドを使用すると、DateTimeオブジェクトがTimeクラスオブジェクトに変換されます。

したがってDateTime.now.to_timeTime.nowはどちらも同じことを示します。

結論 - 私はあなたが

Time.now.strftime( "%のZ")

代わりの

DateTime.now.to_time.strftimeを使用することをお勧めします( "%Z")

関連する問題