/ / Date, DateTime i strefa czasowa - ruby, datetime, type-conversion

Data, Data i godzina oraz strefa czasowa - ruby, datetime, konwersja typu

Mam aplikację ze strefą czasową serwera BST (British Summer Time). Gdy Date zostanie utworzona strefa czasowa, ponieważ strefa czasowa jest wyświetlana jako BST (lub +01:00) kiedy Date obiekt jest konwertowany na a Time obiekt (in_time_zone jest metodą szyn, ale jest używana w pytaniu tylko w celu podkreślenia problemu.):

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

Jednak, DateTime nie przestrzega strefy czasowej:

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

i zostanie to przetłumaczone na 1 w nocy przez serwer:

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

Obecnie wykonuję następujące czynności, aby wymusić poprawną strefę czasową w obiekcie datetime:

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

ale wydaje się to na tyle złe, że można umieścić w kodzie komentarz wyjaśniający, dlaczego jest napisany w ten sposób.

Dlaczego konwersja na DateTime zachowują się inaczej niż konwersja do Time? Czy powinien być traktowany jako błąd rubinowy, czy jest to zamierzone zachowanie?

Ten sam problem występuje w irb. Przetestowano w Ruby-1.9.3-p448, Ruby-2.1.0 i Ruby-2.1.2.

Odpowiedzi:

1 dla odpowiedzi № 1

Przynajmniej wygląda to na zamierzone zachowanie, jak to zauważono tutaj i tutaj, a autor Tadayoshi Funaba ma kilkakomentuje to w dyskusji. Chociaż (nie przeczytałem i) nie do końca kieruję się logiką (podobnie jak osoba, która o to pyta, i wielu innych). Wydaje się, że Tadayoshi Funaba poczuł się sfrustrowany i (prawdopodobnie z tego powodu celowo) komentarze są w większości po japońsku, mimo że pytanie zostało napisane po angielsku.