我的数据集中有异常的日期时间格式,我需要将其转换为可用的日期时间对象。
一个例子看起来像:'1/3/2018 1:29:35 PM(UTC + 0)'
我试图用解析它:
from dateutil.parser import parse
parse('1/3/2018 1:29:35 PM(UTC+0)')
但无法识别格式。
我当前的解决方法是使用正则表达式将datetime列(数据在pandas数据框中)解析为两列,如下所示:
然后根据“ utc”列的值,应用自定义convert_to_eastern函数。
我想知道是否有更简单的方法可以使用datetime.datetime.strptime()完成它?
以下操作无效:
import datetime as dt
my_time='1/3/2018 1:29:35 PM(UTC+0)'
dt.datetime.strptime(my_time, '%m/%d/%Y %I:%M:%S %p(%z)')
另外:这不是问题:“如何将UTC时区转换为本地时区”我的数据集包含带有UTC的行以及东部时区的行。我的问题是格式不是ISO格式,而是一些人类可读的自定义格式。
问题:使用datetime.datetime.strptime()轻松完成此任务的方法
将日期字符串拆分为多个部分:utc:[('1/3/2018 1:29:35 PM', '(UTC+0)', 'UTC', '+', '0')]
重建日期字符串,将hour
填充的部分固定0
为2位。
我想,有没有minutes
在UTC
部分,因此默认00
。
如果日期字符串的UTC
位数超过2位,则返回未更改的日期字符串。
注意:
strptime
格式必须为%Z%z
!
文档:strftime和strptime行为
from datetime import datetime
import re
def fix_UTC(s):
utc = re.findall(r'(.+?)(\((\w{3})(\+|\-)(\d{1,2})\))', s)
if utc:
utc = utc[0]
return '{}({}{}{})'.format(utc[0], utc[2], utc[3], '{:02}00'.format(int(utc[4])))
else:
return s
my_time = fix_UTC('1/3/2018 1:29:35 PM(UTC+0)')
date = datetime.strptime(my_time, '%m/%d/%Y %I:%M:%S %p(%Z%z)')
print("{} {}".format(date, date.tzinfo))
输出:
2018-01-03 13:29:35+01:00 UTC
使用Python测试:3.4.2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句