1313COMMIT_DATE_FORMAT = "%Y-%m-%dT%H:%M:%S"
1414GITHUB_TZ = tz .gettz ("America/Los_Angeles" )
1515
16+ # Operate on naive datetime objects, this is the default for backwards
17+ # compatibility
18+ NAIVE = True
19+
1620
1721def ghdate_to_datetime (github_date ):
1822 """Convert Github date string to Python datetime
1923
2024 :param str github_date: date string to parse
2125 """
22- return parser .parse (github_date ).replace (tzinfo = None )
26+ parsed = parser .parse (github_date )
27+ if NAIVE :
28+ parsed = parsed .replace (tzinfo = None )
29+ return parsed
2330
2431
2532def datetime_to_ghdate (datetime_ ):
2633 """Convert Python datetime to Github date string
2734
2835 :param datetime datetime_: datetime object to convert
2936 """
30- datetime_ = datetime_ .replace (tzinfo = GITHUB_TZ )
37+ if not datetime_ .tzinfo :
38+ datetime_ = datetime_ .replace (tzinfo = GITHUB_TZ )
39+ else :
40+ datetime_ = datetime_ .astimezone (GITHUB_TZ )
3141 return datetime_ .strftime (GITHUB_DATE_FORMAT )
3242
3343
@@ -36,15 +46,21 @@ def commitdate_to_datetime(commit_date):
3646
3747 :param str github_date: date string to parse
3848 """
39- return parser .parse (commit_date ).replace (tzinfo = None )
49+ parsed = parser .parse (commit_date )
50+ if NAIVE :
51+ parsed = parsed .replace (tzinfo = None )
52+ return parsed
4053
4154
4255def datetime_to_commitdate (datetime_ ):
4356 """Convert Python datetime to Github date string
4457
4558 :param datetime datetime_: datetime object to convert
4659 """
47- datetime_ = datetime_ .replace (tzinfo = GITHUB_TZ )
60+ if not datetime_ .tzinfo :
61+ datetime_ = datetime_ .replace (tzinfo = GITHUB_TZ )
62+ else :
63+ datetime_ = datetime_ .astimezone (GITHUB_TZ )
4864 date_without_tz = datetime_ .strftime (COMMIT_DATE_FORMAT )
4965 utcoffset = GITHUB_TZ .utcoffset (datetime_ )
5066 hours , minutes = divmod (utcoffset .days * 86400 + utcoffset .seconds , 3600 )
@@ -62,23 +78,34 @@ def userdate_to_datetime(user_date):
6278
6379 :param str user_date: date string to parse
6480 """
65- return parser .parse (user_date ).replace (tzinfo = None )
81+ parsed = parser .parse (user_date )
82+ if NAIVE :
83+ parsed = parsed .replace (tzinfo = None )
84+ return parsed
6685
6786
6887def isodate_to_datetime (iso_date ):
6988 """Convert commit date string to Python datetime
7089
7190 :param str github_date: date string to parse
7291 """
73- return parser .parse (iso_date ).replace (tzinfo = None )
92+ parsed = parser .parse (iso_date )
93+ if NAIVE :
94+ parsed = parsed .replace (tzinfo = None )
95+ return parsed
96+
7497
7598
7699def datetime_to_isodate (datetime_ ):
77100 """Convert Python datetime to Github date string
78101
79102 :param str datetime_: datetime object to convert
80103 """
81- return "%sZ" % datetime_ .isoformat ()
104+ if not datetime_ .tzinfo :
105+ datetime_ = datetime_ .replace (tzinfo = tz .tzutc ())
106+ else :
107+ datetime_ = datetime_ .astimezone (tz .tzutc ())
108+ return "%sZ" % datetime_ .isoformat ()[:- 6 ]
82109
83110
84111class AuthError (Exception ):
0 commit comments