From 214e4344796f4f5a3ce83ac8c69010dc633b69ed Mon Sep 17 00:00:00 2001 From: "mshaposhnikov@w3-edge.com" Date: Wed, 19 Mar 2025 17:41:06 +0100 Subject: [PATCH] IB uses timezone names for NY/Chicago instruments which couldn't be recognized by python --- ib_async/util.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ib_async/util.py b/ib_async/util.py index bc1435d..720e007 100644 --- a/ib_async/util.py +++ b/ib_async/util.py @@ -554,6 +554,12 @@ def formatIBDatetime(t: Union[dt.date, dt.datetime, str, None]) -> str: return s +pythonTimeZonesByIb = { + "US/Central": "America/Chicago", + "US/Eastern": "America/New_York", +} + + def parseIBDatetime(s: str) -> Union[dt.date, dt.datetime]: """Parse string in IB date or datetime format to datetime.""" if len(s) == 8: @@ -568,6 +574,10 @@ def parseIBDatetime(s: str) -> Union[dt.date, dt.datetime]: # 20221125 10:00:00 Europe/Amsterdam s0, s1, s2 = s.split(" ", 2) t = dt.datetime.strptime(s0 + s1, "%Y%m%d%H:%M:%S") + # Some zone names IB uses are unknown in python, map them + if s2 in pythonTimeZonesByIb: + s2 = pythonTimeZonesByIb[s2] + t = t.replace(tzinfo=ZoneInfo(s2)) else: # YYYYmmdd HH:MM:SS