You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
# 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)
 |