Skip to content

Commit 8b94ead

Browse files
Merge pull request #667 from abravalheri/improve-datetime-utc
Ensure UTC is used everywhere
2 parents 22724eb + c0995f1 commit 8b94ead

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/setuptools_scm/version.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import datetime
21
import os
32
import re
4-
import time
53
import warnings
4+
from datetime import datetime
5+
from datetime import timezone
66
from typing import Callable
77
from typing import Iterator
88
from typing import List
@@ -118,9 +118,11 @@ def __init__(
118118
self.distance = distance
119119
self.node = node
120120
self.node_date = node_date
121-
self.time = datetime.datetime.utcfromtimestamp(
122-
int(os.environ.get("SOURCE_DATE_EPOCH", time.time()))
123-
)
121+
if "SOURCE_DATE_EPOCH" in os.environ:
122+
date_epoch = int(os.environ["SOURCE_DATE_EPOCH"])
123+
self.time = datetime.fromtimestamp(date_epoch, timezone.utc)
124+
else:
125+
self.time = datetime.now(timezone.utc)
124126
self._extra = kw
125127
self.dirty = dirty
126128
self.preformatted = preformatted
@@ -351,12 +353,13 @@ def guess_next_date_ver(version, node_date=None, date_fmt=None, version_cls=None
351353
# deduct date format if not provided
352354
if date_fmt is None:
353355
date_fmt = "%Y.%m.%d" if len(match.group("year")) == 4 else "%y.%m.%d"
354-
head_date = node_date or datetime.date.today()
356+
today = datetime.now(timezone.utc).date()
357+
head_date = node_date or today
355358
# compute patch
356359
if match is None:
357-
tag_date = datetime.date.today()
360+
tag_date = today
358361
else:
359-
tag_date = datetime.datetime.strptime(match.group("date"), date_fmt).date()
362+
tag_date = datetime.strptime(match.group("date"), date_fmt).date()
360363
if tag_date == head_date:
361364
patch = "0" if match is None else (match.group("patch") or "0")
362365
patch = int(patch) + 1

testing/test_git.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import sys
33
from datetime import date
44
from datetime import datetime
5+
from datetime import timezone
56
from os.path import join as opj
67
from unittest.mock import Mock
78
from unittest.mock import patch
@@ -215,7 +216,7 @@ def test_git_dirty_notag(today, wd, monkeypatch):
215216
assert wd.version.startswith("0.1.dev1")
216217
if today:
217218
# the date on the tag is in UTC
218-
tag = datetime.utcnow().date().strftime(".d%Y%m%d")
219+
tag = datetime.now(timezone.utc).date().strftime(".d%Y%m%d")
219220
else:
220221
tag = ".d20090213"
221222
# we are dirty, check for the tag

0 commit comments

Comments
 (0)