2012-02-03 11 views

risposta

24

Tempo sempre una zona (non ha alcun significato senza uno). Si può scegliere di ignorarlo quando si stampa utilizzando 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 

Vedi Time#strftime per i codici arcani utilizzati per costruire un particolare formato.

In alternativa, è possibile impostare convert your DateTime to UTC per una rappresentazione più generale.

+8

Niente affatto! DateTime (che non è lo stesso di Time) memorizza solo le informazioni del calendario e non ha bisogno di puntare un punto specifico nel tempo. Pertanto, il fuso orario non specificato ha senso in alcuni casi. Ad esempio, http://tools.ietf.org/html/rfc5545#section-3.3.5 (modulo # 1). – skalee

+0

@skalee Penso che potresti sbagliare la classe ['Date'] (http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html) con il [' DateTime'] (http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/DateTime.html) classe. Il primo ha solo informazioni sul calendario, quest'ultimo include il tempo (che deve essere associato a un fuso orario). Considera l'output di 'DateTime.new (2016,5,5) .to_s # =>" 2016-05-05T00: 00: 00 + 00: 00 "', dove "+00: 00" alla fine indica che questo è mezzanotte _ ** in GMT ** _ (ad es. a Londra), non a mezzanotte a Denver, CO. – Phrogz

0

Quando tutto il resto fallisce

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

Oltre alla risposta accettata è anche possibile aggiungere gli stessi parametri per strftimeDATE_FORMATS un hash Rails permette di standardizzare formati di output nell'applicazione.

In config/initializers/datetime_formats.rb:

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

Poi nel codice che si poteva fare:

Time.zone.now.to_s(:nozone) 

si potrebbe anche rendere il default:

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

C'è anche un hash separata per le date:

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

Questa funzione esiste da anni ma sembra essere poco conosciuta.

Problemi correlati