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ď č. 1Prinajmenš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.