为了将字符串类型日期转化为可供python进行数据分析的数据类型,这里我介绍3种推荐方法,以及1种不太推荐的方法.
推荐方法一:
用datetime类的.strptime()方法,具体使用方式为
from datetime import datetime #从datetime模块中载入datetime类
utc_time_str = '2020-09-11T03:01:48.123Z'#我们的输入字符串日期,精度为毫秒(其中T代表时间,Z表示
#UCT时间中的0时区)
a = datetime.strptime(utc_time_str, '%Y-%m-%dT%H:%M:%S.%fZ')
#两个参数,一个是字符串日期,还一个是此日期的格式化表达,详见此函数的帮助文档
a # 可以看到原字符串日期被转化为了datetime数据
out:datetime.datetime(2020, 9, 11, 3, 1, 48, 123000)
a.timestamp()#利用此数据的.timestamp可将其转化为时间戳
out:1599793308.123
方法二:
由于每次都编写日期格式定义比较麻烦,可以使用第三方库dateutil
中的parser.parse方法,使用方法非常简单,直接将字符串传入函数即可,dateutil可以解析几乎所有人类能够理解的日期表示形式,使用方法如下:
from dateutil.parser import parse
parse('2020-09-11T03:01:48.123Z')
out: datetime.datetime(2020, 9, 11, 3, 1, 48, 123000, tzinfo=tzlocal())
parse('Jan 9, 2023 23:43')
out: datetime.datetime(2023, 1, 9, 23, 43)
函数的其他参数如dayfirst等,可参考其帮助文档
推荐方法三:
对于数据列表形式的日期组,推荐使用pandas中的to_datetime方法,此方法可识别大部分格式的字符串日期,方法如下:
import pandas as pd
datestrs = ['2020-09-11T03:01:48.123Z', '2020-10-11T03:01:38.123Z']
aa= pd.to_datetime(datestrs)
aa
out: DatetimeIndex(['2020-09-11 03:01:48.123000+00:00', '2020-10-11 03:01:38.123000+00:00'], dtype='datetime64[ns, UTC]', freq=None)
aa[1].timestamp()
out: 1602385298.123
不推荐方法一:
使用time库进行上述转换,具体方法如下
import time
utc_time_str = '2020-09-11T03:01:48.123Z'
time_array = time.strptime(utc_time_str, '%Y-%m-%dT%H:%M:%S.%fZ')
time_array
out: time.struct_time(tm_year=2020, tm_mon=9, tm_mday=11, tm_hour=3, tm_min=1, tm_sec=48, tm_wday=4, tm_yday=255, tm_isdst=-1)
time.mktime(time_array)
out: 1599793308.0
可以看到将字符串日期转化为time类型结构化时间表示后,秒的小数部分被舍去了,因此会造成精度上的丢失.
版权声明:本文为Sundance_kkid原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。