Skip to content

Commit 5e33f65

Browse files
committed
docs: note timezone fix
1 parent 34f5ff6 commit 5e33f65

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

docs/changelog.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Changelog
1414
* Removed deprecated ``hl7.version`` module; use ``hl7.__version__`` instead.
1515
* Fixed a bug in `mllp_send --quiet` -- thanks `Spencer Vecile <https://github.com/svecile>`_!
1616
* Switched formatting and linting from black/isort and flake8 to ``ruff``.
17+
* Fixed timezone formatting when ``parse_datetime`` created ``_UTCOffset`` with a
18+
float value.
1719

1820

1921
0.4.5 - March 2022

hl7/datatypes.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ class _UTCOffset(datetime.tzinfo):
1010
"""Fixed offset timezone from UTC."""
1111

1212
def __init__(self, minutes):
13-
"""``minutes`` is a offset from UTC, negative for west of UTC"""
14-
self.minutes = minutes
13+
"""``minutes`` is an offset from UTC, negative for west of UTC."""
14+
# ``minutes`` may be passed in as a float when constructed via
15+
# :func:`parse_datetime`. ``datetime.timedelta`` and formatting of the
16+
# timezone name expect an ``int``. Store the offset as an ``int`` to
17+
# avoid producing values like ``-5.00.0`` from ``tzname`` when floats are
18+
# used.
19+
self.minutes = int(minutes)
1520

1621
def utcoffset(self, dt):
1722
return datetime.timedelta(minutes=self.minutes)

tests/test_datetime.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,13 @@ def test_parse_tz(self):
4444
def test_tz(self):
4545
self.assertEqual("+0205", _UTCOffset(125).tzname(datetime.utcnow()))
4646
self.assertEqual("-0410", _UTCOffset(-250).tzname(datetime.utcnow()))
47+
48+
def test_parse_tzname(self):
49+
dt = parse_datetime("201403111412-0500")
50+
self.assertEqual("-0500", dt.tzname())
51+
dt = parse_datetime("201403111412+0530")
52+
self.assertEqual("+0530", dt.tzname())
53+
54+
def test_utc_offset_float(self):
55+
self.assertEqual("-0500", _UTCOffset(-300.0).tzname(datetime.utcnow()))
56+
self.assertEqual("+0530", _UTCOffset(330.0).tzname(datetime.utcnow()))

0 commit comments

Comments
 (0)