python2.7格式化数据库返回日期字段
数据库不同表的日期字段格式多种多样,有的日期字段定义为date、datetime,有的定义varchar(16)返回unicode类型,有的是yyyyMMdd格式,有的是yyyy-MM-dd格式,要统一格式化为
yyyy-MM-dd格式 。
在Python 2.7中,str
和 unicode
是两种不同的字符串类型。 但在
Python 3,那么 unicode
类型已经被移除,str
类型现在就是 Unicode 字符串,因此不需要对 unicode
进行特殊处理。在 Python 3 中,你可以直接使用 str
来检查所有字符串类型。 参考源代码如下:
def format_date(date_input):
# 首先尝试最常见的预期格式
if isinstance(date_input, unicode): # Python 2.7特有的检查
date_input = date_input.encode('utf-8') # 转换unicode为str
if isinstance(date_input, datetime):
return date_input.strftime('%Y-%m-%d')
elif isinstance(date_input, date):
return date_input.strftime('%Y-%m-%d')
elif isinstance(date_input, str): # 在Python 2.7中使用basestring
try:
return datetime.strptime(date_input, '%Y-%m-%d').strftime('%Y-%m-%d')
except ValueError:
return datetime.strptime(date_input, '%Y%m%d').strftime('%Y-%m-%d')
except ValueError:
# 如果常见的格式不匹配,尝试去掉可能的前后空格再次匹配
# 注意:这里没有提供额外的格式匹配,因为表结构明确了'%Y-%m-%d'
# 如果确实需要处理其他格式,请在此处添加额外的尝试逻辑
raise TypeError("Unsupported date type: %s with value %s" % (type(date_input), date_input))
else:
raise TypeError("Unsupported date type: %s with value %s" % (type(date_input), date_input))