From 7996a87357e4e67a833bcee5a54ef8b41c491518 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 5 Sep 2017 05:51:00 +0200 Subject: [PATCH] use safe parse_timestamp to parse timestamps, fixes #2994 also: refactor so it is possible to get tz-unaware datetime objects from parse_timestamp. --- src/borg/helpers/manifest.py | 2 +- src/borg/helpers/time.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/borg/helpers/manifest.py b/src/borg/helpers/manifest.py index 632634891..6d2dceadb 100644 --- a/src/borg/helpers/manifest.py +++ b/src/borg/helpers/manifest.py @@ -166,7 +166,7 @@ class Manifest: @property def last_timestamp(self): - return datetime.strptime(self.timestamp, ISO_FORMAT) + return parse_timestamp(self.timestamp, tzinfo=None) @classmethod def load(cls, repository, operations, key=None, force_tam_not_required=False): diff --git a/src/borg/helpers/time.py b/src/borg/helpers/time.py index 84391bf51..c5a5ddd81 100644 --- a/src/borg/helpers/time.py +++ b/src/borg/helpers/time.py @@ -10,10 +10,13 @@ def to_localtime(ts): return datetime(*time.localtime((ts - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds())[:6]) -def parse_timestamp(timestamp): +def parse_timestamp(timestamp, tzinfo=timezone.utc): """Parse a ISO 8601 timestamp string""" fmt = ISO_FORMAT if '.' in timestamp else ISO_FORMAT_NO_USECS - return datetime.strptime(timestamp, fmt).replace(tzinfo=timezone.utc) + dt = datetime.strptime(timestamp, fmt) + if tzinfo is not None: + dt = dt.replace(tzinfo=tzinfo) + return dt def timestamp(s):