diff options
-rw-r--r-- | fietsboek/util.py | 41 | ||||
-rw-r--r-- | fietsboek/views/upload.py | 2 |
2 files changed, 22 insertions, 21 deletions
diff --git a/fietsboek/util.py b/fietsboek/util.py index aff41fe..ddc4832 100644 --- a/fietsboek/util.py +++ b/fietsboek/util.py @@ -127,26 +127,27 @@ def guess_gpx_timezone(gpx): # Next, we look if there's a "localTime" extension on the track, so we can # compare the local time to the time. - for track in gpx.tracks: - time = times[0] - local_time = None - for extension in track.extensions: - if extension.tag.lower() == 'localtime': - local_time = datetime.datetime.fromisoformat( - fix_iso_timestamp(extension.text)).replace(tzinfo=None) - elif extension.tag.lower() == 'time': - time = datetime.datetime.fromisoformat( - fix_iso_timestamp(extension.text)).replace(tzinfo=None) - if time is not None and local_time is not None: - # We found a pair that we can use! - offset = local_time - time - # With all the time madness, luckily most time zones seem to stick - # to an offset that is a multiple of 15 minutes (see - # https://en.wikipedia.org/wiki/List_of_UTC_offsets). We try to - # round the value to the nearest of 15 minutes, to prevent any - # funky offsets from happening due to slight clock desyncs. - offset = round_timedelta_to_multiple(offset, datetime.timedelta(minutes=15)) - return datetime.timezone(offset) + if times: + for track in gpx.tracks: + time = times[0] + local_time = None + for extension in track.extensions: + if extension.tag.lower() == 'localtime': + local_time = datetime.datetime.fromisoformat( + fix_iso_timestamp(extension.text)).replace(tzinfo=None) + elif extension.tag.lower() == 'time': + time = datetime.datetime.fromisoformat( + fix_iso_timestamp(extension.text)).replace(tzinfo=None) + if local_time is not None: + # We found a pair that we can use! + offset = local_time - time + # With all the time madness, luckily most time zones seem to stick + # to an offset that is a multiple of 15 minutes (see + # https://en.wikipedia.org/wiki/List_of_UTC_offsets). We try to + # round the value to the nearest of 15 minutes, to prevent any + # funky offsets from happening due to slight clock desyncs. + offset = round_timedelta_to_multiple(offset, datetime.timedelta(minutes=15)) + return datetime.timezone(offset) # If all else fails, we assume that we are UTC+00:00 return datetime.timezone.utc diff --git a/fietsboek/views/upload.py b/fietsboek/views/upload.py index 4f42b80..bbd8f68 100644 --- a/fietsboek/views/upload.py +++ b/fietsboek/views/upload.py @@ -104,7 +104,7 @@ def finish_upload(request): badges = [(False, badge) for badge in badges] gpx = gpxpy.parse(upload.gpx_data) timezone = util.guess_gpx_timezone(gpx) - date = gpx.time or gpx.get_time_bounds().start_time + date = gpx.time or gpx.get_time_bounds().start_time or datetime.datetime.now() date = date.astimezone(timezone) tz_offset = timezone.utcoffset(date) track_name = "" |