2017-02-18 4 views
0

Я чувствую, что мне не хватает чего-то очень простого здесь. Я прочитал APIDock, ожидая, что %Z вернет сокращенный часовой пояс (например,). Он делает это для объекта Time, но не DateTime.Различные выходные данные для DateTime.strftime vs 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 показывает числовое значение. Чтобы получить сокращенное название, необходимо явно привести DateTime объект Time:

▶ 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 в объект класса времени.

Таким образом, DateTime.now.to_time и Time.now обе дают вам то же самое.

Вывод - я предлагаю вам использовать

Time.now.strftime ("% Z")

вместо

DateTime.now.to_time.strftime («% Z»)

Смежные вопросы