Closed
Description
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.
Metadata
Metadata
Assignees
Labels
No labels