/ / Date, DateTime e il fuso orario - ruby, datetime, conversione del tipo

Data, DateTime e il fuso orario: ruby, datetime, type-conversion

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 № 1

Almeno 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.