Sha256: 1c27e427dbf13e346b11f7bb241a437f46bb61db07ee5c9f0321b44c6e679337

Contents?: true

Size: 1.76 KB

Versions: 47

Compression:

Stored size: 1.76 KB

Contents

# 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)

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
libv8-8.4.255.0.1 vendor/depot_tools/git_dates.py
libv8-8.4.255.0 vendor/depot_tools/git_dates.py
libv8-7.8.279.23.0beta1 vendor/depot_tools/git_dates.py
libv8-7.4.288.28.0beta1 vendor/depot_tools/git_dates.py
libv8-7.3.492.27.3beta1 vendor/depot_tools/git_dates.py
libv8-7.3.492.27.1 vendor/depot_tools/git_dates.py
libv8-7.3.492.27.0 vendor/depot_tools/git_dates.py
libv8-7.3.492.27.0beta1 vendor/depot_tools/git_dates.py
libv8-6.7.288.46.1 vendor/depot_tools/git_dates.py
libv8-6.7.288.46.0 vendor/depot_tools/git_dates.py
libv8-6.7.288.46.1beta0 vendor/depot_tools/git_dates.py
libv8-6.3.292.48.1 vendor/depot_tools/git_dates.py
libv8-6.3.292.48.0 vendor/depot_tools/git_dates.py
libv8-6.3.292.48.0beta2 vendor/depot_tools/git_dates.py
libv8-6.3.292.48.0beta1 vendor/depot_tools/git_dates.py
libv8-6.2.414.42.1 vendor/depot_tools/git_dates.py
libv8-6.2.414.42.0 vendor/depot_tools/git_dates.py
libv8-6.2.414.42.0beta1 vendor/depot_tools/git_dates.py
libv8-6.0.286.54.3 vendor/depot_tools/git_dates.py
libv8-6.0.286.54.2 vendor/depot_tools/git_dates.py