utc_offset в эликсире возвращает неправильное смещение для часовых поясов - PullRequest
2 голосов
/ 03 мая 2020

Возможно, я чего-то не понимаю, но это может показаться более прямым.

iex> {:ok, datetime_with_tz} = DateTime.now("Europe/London", Tzdata.TimeZoneDatabase)
{:ok, #DateTime<2020-05-02 21:57:11.136512+01:00 BST Europe/London>}

iex> DateTime.utc_now
~U[2020-05-02 20:57:21.869835Z]

//correct as it's already in utc
iex> DateTime.utc_now.utc_offset
0 

// incorrect this should be 3600 i.e +01:00 hours of offset and not 0 .. ?
iex> datetime_with_tz.utc_offset
0  

1 Ответ

3 голосов
/ 03 мая 2020

Это потому, что Лондон обычно UTC + 00: 00, его в настоящее время +01: 00 из-за летнего времени (BST означает Briti sh Summer Time).

DateTime имеют std_offset чтобы справиться с этим.

iex(1)> {:ok, datetime_with_tz} = DateTime.now("Europe/London", Tzdata.TimeZoneDatabase) 
iex(2)> datetime_with_tz.std_offset
3600
...