[英]change datetime format in python list
我想日期时间从STR转换像2008-1-12 00:00:00
到20080112
,该datetimes
从Excel列。 我的程序如下:
def btk_datetime2cvh(table, title):
datetimes = list(table[title])
dmyhms_pattern = re.compile(r"^((?:19|20)\d\d)-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])\s+(20|21|22|23|[0-1]\d:[0-5]\d:\[0-5]\d)$")
for num, dt in enumerate(datetimes):
try:
year, month, day, time = dmyhms_pattern.findall(dt)[0]
if int(month) < 10 and int(day) < 10:
datetimes[num] = year + "0" + str(int(month)) + "0" + str(int(day))
elif int(month) < 10 and int(day) > 10:
datetimes[num] = year + "0" + str(int( month)) + day
elif int(month) > 10 and int(day) < 10:
datetimes[num] = year + month + "0" + str(int(day))
elif int(month) > 10 and int(day) > 10:
datetimes[num] = year + month + day
except (ValueError,TypeError,IndexError):
datetimes[num] = "!" + str(dt)
table[title] = pd.Series(datetimes)
return table
程序运行的结果很奇怪,大多数值都成功转换为20121231
等 8 位字符,但有些值保持不变:
2008-10-11 00:00:00
2009-10-24 00:00:00
20070529
20051211
20060818
2016-10-11 00:00:00
20160503
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170908
20170906
20170906
20170906
20170906
2015-10-13 00:00:00
20170908
一开始以为是Excel单元格格式设置的问题。 但是在验证了程序的输出之后,程序的String拼接没有问题,但是好像新的字符串没有成功赋值给datetimes[num]
。 我真的不知道为什么? 谁能帮我?
您可能想要使用事实上的 dateutil 库。 https://dateutil.readthedocs.io/en/stable/
你可以简单地这样做:
from dateutil import parser
dt = '2008-1-12 00:00:00'
parser.parse(dt).strftime("%Y%m%d")
>>'20080112'
经常滚动你自己的可能真的很容易出错和复杂。
如果您查看每个未能转换的日期,您会看到一个模式:
2008-10-11 00:00:00
2009-10-24 00:00:00
2016-10-11 00:00:00
2015-10-13 00:00:00
所有月份的值为10
。
现在看看你的条件:
int(month) < 10 and int(day) < 10:
int(month) < 10 and int(day) > 10:
int(month) > 10 and int(day) < 10:
int(month) > 10 and int(day) > 10:
你永远不会考虑到正好是 10 的月或日。没有一个条件是真的,所以什么都没有改变。
添加一个else
案例来处理这些实例,或者将一些<
更改为<=
以处理 10。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.