2012-02-03 16 views

Odpowiedz

24

Czas zawsze ma strefę (to nie ma sensu bez niego). Można wybrać, aby go zignorować podczas drukowania za pomocą 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 

Zobacz Time#strftime dla tajemniczych kodów wykorzystywanych do budowy konkretnego formatu.

Alternatywnie możesz chcieć convert your DateTime to UTC dla bardziej ogólnej reprezentacji.

+8

Wcale nie! DateTime (która nie jest taka sama jak Time) przechowuje tylko informacje kalendarza i nie musi wskazywać konkretnego punktu w czasie. Dlatego nieokreślona strefa czasowa ma sens w niektórych przypadkach. Na przykład http://tools.ietf.org/html/rfc5545#section-3.3.5 (formularz nr 1). – skalee

+0

@skalee Wydaje mi się, że możesz pomylić klasę ['Date'] (http://ruby- doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html) z [' DateTime'] (http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/DateTime.html) klasa. Ta pierwsza zawiera tylko informacje kalendarzowe, ta ostatnia zawiera czas (który musi być powiązany ze strefą czasową). Rozważmy wyjście 'DateTime.new (2016,5,5) .to_s # =>" 2016-05-05T00: 00: 00 + 00: 00 "', gdzie '+00: 00' na końcu wskazuje, że jest północ 00 ** w GMT ** _ (np. Londyn), nie północ w Denver, Kolorado. – Phrogz

0

Kiedy wszystko inne zawiedzie

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") 
1

Oprócz przyjętej odpowiedź można również dodać te same strftime parametry DATE_FORMATS hash Rails pozwalające na standaryzację formatów wyjściowych w aplikacji.

W config/initializers/datetime_formats.rb:

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

Następnie w kodzie można zrobić:

Time.zone.now.to_s(:nozone) 

Można nawet uczynić ją domyślną:

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

Jest też oddzielny hash dla dat:

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

Ta funkcja działa od lat, ale wydaje się mało znana.

Powiązane problemy