/ / Date, DateTime a časové pásmo - rubín, datetime, konverzia typu

Dátum, dátum a časové pásmo - rubín, dátum, typová konverzia

Mám aplikáciu s časovým pásmom servera BST (British Summer Time). Kedy Date Ak je časové pásmo zobrazené ako BST (alebo +01:00) keď Date objekt je prevedený na a Time objekt (in_time_zone je metóda koľajníc, ale v otázke sa používa iba na zdôraznenie problému.):

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

Avšak, DateTime nerešpektuje časové pásmo:

Date.today.to_datetime   #=> Tue, 16 Sep 2014 00:00:00 +0000

a server to preloží na 1:00:

Date.today.to_datetime.in_time_zone #=> Tue, 16 Sep 2014 01:00:00 BST +01:00

V súčasnosti robím nasledovné, aby som vynútil správne časové pásmo na objekte datetime:

Date.today.to_time.to_datetime  #=> Tue, 16 Sep 2014 00:00:00 +0100

ale je to dosť zlé na to, aby ste v kóde uviedli komentár, ktorý vysvetľuje, prečo je takto napísaný.

Prečo je prevod na DateTime správať sa inak ako konverzia na Time? Malo by byť považované za rubínovú chybu alebo je to úmyselné správanie?

Rovnaký problém sa vyskytuje v irb. Testované v Ruby-1.9.3-p448, Ruby-2.1.0 a Ruby-2.1.2.

odpovede:

1 pre odpoveď č. 1

Prinajmenšom to vyzerá ako zamýšľané správanie, ako bolo uvedené tu a tu, a autor Tadayoshi Funaba má nejakékomentáre k tejto téme v diskusii. Aj keď (neprečítal (a) som sa neriadi logikou (ako aj osobou, ktorá to žiada, a mnohými ďalšími). Zdá sa, že sa Tadayoshi Funaba nejako frustroval a (pravdepodobne z tohto dôvodu úmyselne) sú komentáre väčšinou v japončine, hoci otázka bola napísaná v angličtine.