Skip to content

Commit 6a5a5e9

Browse files
authored
Merge pull request #4668 from emptywee/master
isotime formatter: assume incoming epoch timestamp being in UTC
2 parents 2c8fec9 + 70547d4 commit 6a5a5e9

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ Fixed
1818

1919
In StackStorm v3.0.0, this variable was inadvertently removed from the context used by Mistral
2020
workflows. (bug fix) #4650 #4656
21+
* Fix a bug with ``timestamp`` attribute in the ``execution.log`` attribute being incorrect when
22+
server time where st2api is running was not set to UTC. (bug fix) #4668
23+
24+
Contributed by Igor Cherkaev. (@emptywee)
2125

2226
3.0.0 - April 18, 2019
2327
----------------------

st2common/st2common/util/isotime.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from __future__ import absolute_import
2020
import re
2121
import datetime
22+
from dateutil import tz as tzi
2223

2324
from st2common.util import date as date_utils
2425
import six
@@ -47,7 +48,7 @@ def format(dt, usec=True, offset=True):
4748
dt = parse(dt)
4849
elif isinstance(dt, int):
4950
# unix epoch
50-
dt = datetime.datetime.fromtimestamp(dt)
51+
dt = datetime.datetime.fromtimestamp(dt, tzi.tzutc())
5152

5253
fmt = ISO8601_FORMAT_MICROSECOND if usec else ISO8601_FORMAT
5354
if offset:

st2common/tests/unit/test_isotime_utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,24 @@ def test_format(self):
6767
dt_str_offset = '2000-01-01T12:00:00+00:00'
6868
dt_str = '2000-01-01T12:00:00Z'
6969
dt_unicode = u'2000-01-01T12:00:00Z'
70+
71+
# datetime object
7072
self.assertEqual(isotime.format(dt, usec=True, offset=True), dt_str_usec_offset)
7173
self.assertEqual(isotime.format(dt, usec=True, offset=False), dt_str_usec)
7274
self.assertEqual(isotime.format(dt, usec=False, offset=True), dt_str_offset)
7375
self.assertEqual(isotime.format(dt, usec=False, offset=False), dt_str)
7476
self.assertEqual(isotime.format(dt_str, usec=False, offset=False), dt_str)
7577
self.assertEqual(isotime.format(dt_unicode, usec=False, offset=False), dt_unicode)
7678

79+
# unix timestamp (epoch)
80+
dt = 1557390483
81+
self.assertEqual(isotime.format(dt, usec=True, offset=True),
82+
'2019-05-09T08:28:03.000000+00:00')
83+
self.assertEqual(isotime.format(dt, usec=False, offset=False),
84+
'2019-05-09T08:28:03Z')
85+
self.assertEqual(isotime.format(dt, usec=False, offset=True),
86+
'2019-05-09T08:28:03+00:00')
87+
7788
def test_format_tz_naive(self):
7889
dt1 = datetime.datetime.utcnow()
7990
dt2 = isotime.parse(isotime.format(dt1, usec=True))

0 commit comments

Comments
 (0)