Как удалить зону из значения DateTime?
У меня есть это DateTime:
=> Fri, 03 Feb 2012 11:52:42 -0500
Как удалить зону (-0500) в рубине?
Я просто хочу что-то вроде этого:
=> Fri, 03 Feb 2012 11:52:42
Ответы
Ответ 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")