Как удалить зону из значения DateTime? - PullRequest
26 голосов
/ 03 февраля 2012

У меня есть этот DateTime:

=> Fri, 03 Feb 2012 11:52:42 -0500

Как удалить зону (-0500) в ruby? Я просто хочу что-то вроде этого:

=> Fri, 03 Feb 2012 11:52:42

Ответы [ 3 ]

29 голосов
/ 03 февраля 2012

Время всегда имеет зону (без нее нет смысла).Вы можете игнорировать его при печати, используя DateTime#strftime:

now = DateTime.now
puts now
#=> 2012-02-03T10:01:24-07:00

puts now.strftime('%a, %d %b %Y %H:%M:%S')
#=> Fri, 03 Feb 2012 10:01:24

См. Time#strftime для тайных кодов, используемых для создания определенного формата.

В качестве альтернативы вы можете преобразовать ваш DateTime в UTC для более общего представления.

2 голосов
/ 05 декабря 2017

В дополнение к принятому ответу вы также можете добавить те же параметры strftime в DATE_FORMATS хеш Rails, позволяющий стандартизировать выходные форматы в вашем приложении.

В config/initializers/datetime_formats.rb:

Time::DATE_FORMATS[:nozone] = '%a, %d %b %Y %H:%M:%S'

Тогда в вашем коде вы можете сделать:

Time.zone.now.to_s(:nozone)

Вы можете даже сделать его по умолчанию:

Time::DATE_FORMATS[:default] = '%a, %d %b %Y %H:%M:%S'
Time.zone.now.to_s

Существует также отдельный хэш для дат:

Date::DATE_FORMATS[:default] = '%a, %d %b %Y'

Эта функция существует уже много лет, но кажется малоизвестной.

1 голос
/ 05 июня 2015

Когда все остальное терпит неудачу

zoned_time = Time.now
unzoned_time = Time.new(zoned_time.year, zoned_time.month, zoned_time.day, zoned_time.hour, zoned_time.min, zoned_time.sec, "+00:00")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...