我的数据集中有异常的日期时间格式,我需要将其转换为可用的日期时间对象。
示例如下:'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格式,而是一些人类可读的自定义格式。
答案 0 :(得分:1)
问题在于您的时区'UTC + 0'为'+0'。 datetime仅采用HHMM
形式的utc偏移量。可能的解决方法:
import datetime as dt
my_time = '1/3/2018 1:29:35 PM(UTC+0)'
my_time=my_time.replace('+0','+0000')
dt.datetime.strptime(my_time, '%m/%d/%Y %I:%M:%S %p(%Z%z)')
答案 1 :(得分:1)
问题:使用datetime.datetime.strptime()
轻松完成此任务的方法
将日期字符串分割成几部分:utc:[('1/3/2018 1:29:35 PM', '(UTC+0)', 'UTC', '+', '0')]
重建日期字符串,将hour
的{{1}}部分填充固定为2位数字。
我假设0
部分中没有minutes
,因此默认为UTC
。
如果日期字符串的位数超过2个00
,则返回未更改的日期字符串。
注意:
UTC
格式必须为strptime
!
文档:strftime-and-strptime-behavior
%Z%z
输出:
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))
使用Python测试:3.4.2
答案 2 :(得分:0)
应该是这样的:
import datetime as dt
my_time='1/3/2018 1:29:35 PM(UTC+0000)'
tmp = dt.datetime.strptime(my_time, '%m/%d/%Y %I:%M:%S %p(%Z%z)')
print(tmp)
大“ Z”代表时区(UTC,GMT等),小“ z”代表增量。另外,您应该在增量中添加更多零。