Skip to content

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

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions