Ho un'applicazione con un fuso orario del server che è BST (British Summer Time). quando Date
viene creato, il fuso orario viene rispettato, poiché il fuso orario viene visualizzato come BST (o +01:00
) quando il Date
l'oggetto è convertito in a Time
oggetto (in_time_zone
è il metodo rails, ma viene utilizzato solo nella domanda per evidenziare il problema.):
Date.today.to_time #=> 2014-09-16 00:00:00 +0100
Date.today.to_time.in_time_zone #=> Tue, 16 Sep 2014 00:00:00 BST +01:00
Però, DateTime
non rispetta il fuso orario:
Date.today.to_datetime #=> Tue, 16 Sep 2014 00:00:00 +0000
e questo verrà tradotto all'1: 00 dal server:
Date.today.to_datetime.in_time_zone #=> Tue, 16 Sep 2014 01:00:00 BST +01:00
Attualmente faccio quanto segue per forzare il fuso orario corretto sull'oggetto datetime:
Date.today.to_time.to_datetime #=> Tue, 16 Sep 2014 00:00:00 +0100
ma questo sembra abbastanza sbagliato da inserire un commento nel codice che spiega perché è scritto così.
Perché la conversione in DateTime
comportarsi diversamente dalla conversione a Time
? Dovrebbe essere trattato come un bug rubino o è un comportamento intenzionale?
Lo stesso problema si verifica in irb. Testato in ruby-1.9.3-p448, ruby-2.1.0 e ruby-2.1.2.
risposte:
1 per risposta № 1Almeno questo sembra un comportamento previsto, come è stato notato Qui e Qui, e l'autore Tadayoshi Funaba ne ha alcunicommenta nella discussione. Anche se (non ho letto, e) non seguo abbastanza la logica (così come la persona che la chiede e molte altre). In qualche modo, Tadayoshi Funaba sembra essersi frustrato e (probabilmente a causa di ciò, intenzionalmente,) i commenti sono principalmente in giapponese anche se la domanda è stata scritta in inglese.