[python]统一转换日期格式dateutil.parser.parse

Python011

[python]统一转换日期格式dateutil.parser.parse,第1张

背景:

我有很多很多的日志数据,每个日志里面都有日期字符串,我需要将其转换为datetime格式

问题是,这些日志里的字符串格式五花八门,有2017-05-25T05:27:30.313292255Z,有2016-07-01T00:00:00以及其他各种我还没有看到的格式。

开始我写了一长串的if else来判断格式,但是总有我漏掉的。

最后上网一查,发现dateutil.parser.parse。可以不用我们指定格式,直接将字符串转换为datetime格式。

注:我试了下"19/May/2017:04:10:06 +0000" 居然失败了- -!那可能这个函数只认识数字不认得字母吧。

用Python实现字符串和日期相互转换的方法,具体如下:

这里用的分别是time和datetime函数来处理

import time,datetime//日期转化为字符串# date to str//输出时间print time.strftime("%Y-%m-%d %X", time.localtime())#str to date//字符串转化为日期t = time.strptime("2016 - 12 - 05", "%Y - %m - %d")y,m,d = t[0:3]//输出时间print datetime.datetime(y,m,d)

5位数日期戳读取 .mat 文件处理里面数据时,发现里面的日期数据全部都是 “5位数” 数字,很不解;后来查到可以在excel中通过设置单元格调回标准日期格式,如下:选中日期戳,右键选择 “格式化单元格(Format Cells)”选择需要的日期格式,点击ok即可通过代码转成标准日期例如这个DataFrame中的日期,全部都是“日期戳”格式的,但我需要的是人能看懂的“标准日期”;确认起始日期首先需拿一个“日期戳”对应的时间(标准日期),减去这个日期戳,得出起始时间。获取起始时间:2018-05-02 对应的日期戳为:43222,接下来通过pandas 的Timedelta()和 to_datetime() 获取起始时间。可以看到起始日期为“1899-12-30”这样一来后续日期戳转标准日期,只需要在 “1899-12-30” 的基础上加 “日期戳”即可。批量转换首先定义一个函数用来进行转换:#定义转化日期戳的函数,stamp为日期戳def date(stamp):delta = pd.Timedelta(str(stamp)+'D')real_time = pd.to_datetime('1899-12-30') + deltareturn real_time然后针对DataFrame需要转换的列进行转换即可: