In the section "Set RTC time from time service," the field raw_offset
from the json received from the time service does not take daylight savings into consideration. However, utc_offset
does. I was getting the wrong local time here in Southern California during daylight savings until I made the following modification:
print("Getting current time:") response = requests.get("http://worldtimeapi.org/api/ip") time_data = response.json() tz_hour_offset = int(time_data['utc_offset'][0:3]) tz_min_offset = int(time_data['utc_offset'][4:6]) if (tz_hour_offset < 0): tz_min_offset *= -1 #unixtime = int(time_data['unixtime']) + int(time_data['raw_offset']) # << Incorrect offset during DST unixtime = int(time_data['unixtime'] + (tz_hour_offset * 60 * 60)) + (tz_min_offset * 60) print(time_data) print("URL time: ", response.headers['date']) rtc.RTC().datetime = time.localtime( unixtime ) # create time struct and set RTC with it
Here is the json data I received from worldtimeapi.org:
{ 'timezone': 'America/Los_Angeles', 'utc_datetime': '2023-03-18T19:20:44.368793+00:00', 'raw_offset': -28800, 'client_ip': 'redacted', 'dst_from': '2023-03-12T10:00:00+00:00', 'unixtime': 1679167244, 'utc_offset': '-07:00', 'datetime': '2023-03-18T12:20:44.368793-07:00', 'week_number': 11, 'abbreviation': 'PDT', 'day_of_year': 77, 'day_of_week': 6, 'dst': True, 'dst_offset': 3600, 'dst_until': '2023-11-05T09:00:00+00:00' }
Here we can verify that raw_offset
of -28800 = -8 hours, but utc_offset
is -7 hours, which is correct during DST.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4