| Index: git_dates.py
|
| diff --git a/git_dates.py b/git_dates.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..41cf3acf983d58408f26b2f8e9bd61cba01f4a82
|
| --- /dev/null
|
| +++ b/git_dates.py
|
| @@ -0,0 +1,62 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Utility module for dealing with Git timestamps."""
|
| +
|
| +import datetime
|
| +
|
| +
|
| +def timestamp_offset_to_datetime(timestamp, offset):
|
| + """Converts a timestamp + offset into a datetime.datetime.
|
| +
|
| + Useful for dealing with the output of porcelain commands, which provide times
|
| + as timestamp and offset strings.
|
| +
|
| + Args:
|
| + timestamp: An int UTC timestamp, or a string containing decimal digits.
|
| + offset: A str timezone offset. e.g., '-0800'.
|
| +
|
| + Returns:
|
| + A tz-aware datetime.datetime for this timestamp.
|
| + """
|
| + timestamp = int(timestamp)
|
| + tz = FixedOffsetTZ.from_offset_string(offset)
|
| + return datetime.datetime.fromtimestamp(timestamp, tz)
|
| +
|
| +
|
| +def datetime_string(dt):
|
| + """Converts a tz-aware datetime.datetime into a string in git format."""
|
| + return dt.strftime('%Y-%m-%d %H:%M:%S %z')
|
| +
|
| +
|
| +# Adapted from: https://docs.python.org/2/library/datetime.html#tzinfo-objects
|
| +class FixedOffsetTZ(datetime.tzinfo):
|
| + def __init__(self, offset, name):
|
| + datetime.tzinfo.__init__(self)
|
| + self.__offset = offset
|
| + self.__name = name
|
| +
|
| + def __repr__(self): # pragma: no cover
|
| + return '{}({!r}, {!r})'.format(type(self).__name__, self.__offset,
|
| + self.__name)
|
| +
|
| + @classmethod
|
| + def from_offset_string(cls, offset):
|
| + try:
|
| + hours = int(offset[:-2])
|
| + minutes = int(offset[-2:])
|
| + except ValueError:
|
| + return cls(datetime.timedelta(0), 'UTC')
|
| +
|
| + delta = datetime.timedelta(hours=hours, minutes=minutes)
|
| + return cls(delta, offset)
|
| +
|
| + def utcoffset(self, dt):
|
| + return self.__offset
|
| +
|
| + def tzname(self, dt):
|
| + return self.__name
|
| +
|
| + def dst(self, dt):
|
| + return datetime.timedelta(0)
|
|
|