繁体   English   中英

更改python列表中的日期时间格式

[英]change datetime format in python list

我想日期时间从STR转换像2008-1-12 00:00:0020080112 ,该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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM