Skip to content

Timezone offset from UTC is wrong when not in DST #362

Closed
@pquentin

Description

@pquentin

It turns out that the Europe/Paris timezone just got out of DST and is now in UTC+1 back from UTC+2. It means that dates should currently be recorded with +0100. date does it correctly:

$ TZ='Europe/Paris' date +"%Y-%m-%dT%H:%M:%S%z"
2015-11-04T08:45:34+0100

However, GitPython uses time.altzone to guess dates in commits, which yields +0200 instead of +0100:

$ TZ='Europe/Paris' python -c 'import time; print(-time.altzone/3600)'
2.0

While the date is still correct, the timezone is now wrong. Indeed, using time.altzone is only correct when:

  1. time.daylight is non zero, eg. the current timezone has a DST defined at some point in the year (always true for Europe/Paris, but always false for Indian/Reunion)
  2. and DST is currently active, which you can check with time.localtime().tm_isdst > 0.

To fix this issue, you should use this code to get the UTC offset in seconds.

is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = time.altzone if is_dst else time.timezone

You still need to multiply by -1 and divide by 3600, but you will get the correct offset this way.

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions