如何将Git log日期格式转换为整数?解决日期比较类型错误
解决Git Log日期字符串转可比较整数/日期对象的问题
你遇到的问题核心在于:直接存储字符串类型的日期,既无法按时间顺序正确比较先后(字符串比较是按字典序,而非时间逻辑),还触发了类型错误。解决的关键是把Git的日期字符串解析成Python能识别的可比较类型——要么是datetime对象(本身支持时间比较),要么是时间戳整数(自1970年epoch以来的秒数)。
方法一:解析为datetime对象(推荐,保留时区信息)
Python的datetime模块提供了strptime方法,可以按照指定格式解析字符串。Git log的日期格式Mon Aug 22 15:43:38 2016 +0200对应的格式字符串是"%a %b %d %H:%M:%S %Y %z",各部分含义:
%a:星期缩写(如Mon)%b:月份缩写(如Aug)%d:两位数字的日期%H:%M:%S:时:分:秒%Y:四位年份%z:时区偏移(如+0200)
修改你的代码如下:
from datetime import datetime # 初始化存储日期的数组 moduleDate = [] # 循环处理提交记录 for i in range(len(commits)): date_str = commits[i]['Date'] print("commited date:", date_str) # 将字符串解析为datetime对象 date_obj = datetime.strptime(date_str, "%a %b %d %H:%M:%S %Y %z") moduleDate.append(date_obj) # 直接取最新日期(datetime对象原生支持比较操作) upToDateModule = max(moduleDate) # 可选:转回原字符串格式输出 print("Latest commit date:", upToDateModule.strftime("%a %b %d %H:%M:%S %Y %z"))
方法二:转换为整数时间戳
如果你确实需要整数类型,可以把datetime对象转成时间戳(Python 3.3+支持):
from datetime import datetime moduleDate = [] # 循环处理提交记录 for i in range(len(commits)): date_str = commits[i]['Date'] print("commited date:", date_str) date_obj = datetime.strptime(date_str, "%a %b %d %H:%M:%S %Y %z") # 转成整数时间戳(自epoch以来的秒数) timestamp = int(date_obj.timestamp()) moduleDate.append(timestamp) # 取最大的时间戳(即最新日期) upToDateModule_ts = max(moduleDate) # 可选:转回datetime对象查看原格式 upToDateModule = datetime.fromtimestamp(upToDateModule_ts, date_obj.tzinfo) print("Latest commit date:", upToDateModule.strftime("%a %b %d %H:%M:%S %Y %z"))
为什么原来的代码报错?
虽然字符串理论上可以调用max(),但你遇到的TypeError大概率是因为moduleDate数组可能混入了非字符串类型,或者字符串格式不一致导致底层比较逻辑异常。用上述方法将日期转成统一的datetime对象或整数时间戳,既能解决类型错误,又能保证日期比较的正确性。
内容的提问来源于stack exchange,提问作者Ioan S.
相关产品推荐
相关产品推荐

