Подтвердить что ты не робот

Как удалить зону из значения DateTime?

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

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

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

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

Ответ 1

Время всегда имеет зону (без нее нет значения). Вы можете игнорировать его при печати с помощью 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

В дополнение к принятому ответу вы также можете добавить те же параметры 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'

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

Ответ 3

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

zoned_time = Time.now
unzoned_time = Time.new(zoned_time.strftime("%Y").to_i,zoned_time.strftime("%m").to_i,zoned_time.strftime("%d").to_i,zoned_time.strftime("%H").to_i,zoned_time.strftime("%M").to_i,zoned_time.strftime("%S").to_i,"+00:00")