Skip to content

Commit 5ce536d

Browse files
authored
fix: added by pass for windows OS to properly convert negative timestamps into datetimes. (#230)
1 parent b0a84c0 commit 5ce536d

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

csep/utils/time_utils.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import calendar
22
import datetime
33
import re
4+
import os
45
import warnings
56
from csep.utils.constants import SECONDS_PER_ASTRONOMICAL_YEAR, SECONDS_PER_DAY
67

@@ -17,8 +18,25 @@ def epoch_time_to_utc_datetime(epoch_time_milli):
1718
"""
1819
if epoch_time_milli is None:
1920
return epoch_time_milli
21+
2022
epoch_time = epoch_time_milli / 1000
21-
dt = datetime.datetime.fromtimestamp(epoch_time, datetime.timezone.utc)
23+
24+
if os.name == "nt" and epoch_time < 0:
25+
26+
if isinstance(epoch_time, int):
27+
sec = epoch_time
28+
milli_sec = 0
29+
else:
30+
whole, frac = str(epoch_time).split(".")
31+
sec = int(whole)
32+
milli_sec = int(frac) * -1
33+
dt = datetime.datetime(1970, 1, 1) + datetime.timedelta(
34+
seconds=sec,
35+
milliseconds=milli_sec
36+
)
37+
else:
38+
dt = datetime.datetime.fromtimestamp(epoch_time, datetime.timezone.utc)
39+
2240
return dt
2341

2442
def datetime_to_utc_epoch(dt):

tests/test_time_utilities.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,8 @@ def test_decimal_year_epoch(self):
5050
test_year = decimal_year(epoch_time_to_utc_datetime(epoch))
5151
self.assertAlmostEqual(year, test_year)
5252

53-
54-
53+
def test_negative_epoch(self):
54+
year = 1969.12315213421321321
55+
epoch = decimal_year_to_utc_epoch(year)
56+
test_year = decimal_year(epoch_time_to_utc_datetime(epoch))
57+
self.assertAlmostEqual(year, test_year)

0 commit comments

Comments
 (0)