Python日期字符串到日期对象
Posted
技术标签:
【中文标题】Python日期字符串到日期对象【英文标题】:Python date string to date object 【发布时间】:2011-02-17 17:34:13 【问题描述】:如何在 python 中将字符串转换为日期对象?
字符串将是:"24052010"
(对应格式:"%d%m%Y"
)
我不想要一个 datetime.datetime 对象,而是一个 datetime.date。
【问题讨论】:
【参考方案1】:您可以在 Python 的 datetime
包中使用 strptime
:
>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)
【讨论】:
我正在尝试一个类似的过程,除了我的输入字符串没有年份,所以它看起来像'2405'。默认情况下,年份为1900
。解析像“2902”这样的二月日期时会出现此问题。我收到此错误ValueError: day is out of range for month
。不知道如何在解析时设置默认年份。【参考方案2】:
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()
【讨论】:
【参考方案3】:直接相关的问题:
如果你有怎么办
datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()
你会得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
format_regex = _TimeRE_cache.compile(format)
File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
return re_compile(self.pattern(format), IGNORECASE)
File "/usr/local/lib/python2.7/re.py", line 194, in compile
return _compile(pattern, flags)
File "/usr/local/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4
你试过了:
<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()
但你仍然得到上面的回溯。
答案:
>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))
【讨论】:
2015-07-20 09:46:55+00:00 我有这种数据,如何获取日期对象? 使用 re(正则表达式)模块将数据从“2015-07-20 09:46:55+00:00”更改为“2015-07-20T09:46:55-00” :00”。然后使用 dateutil.parse 获取一个日期对象。 谢谢,实际上问题是 dict 类型对象,我只是使用 dict.get 得到解决方案 另一个想法是阅读手册 docs.python.org/3/library/… 并注意 %B 代表“月份作为语言环境的全名”。这就像“一月”或“十二月”,所以“02”不会解析。 这里的日期格式字符串不正确,应该是%m而不是%B【参考方案4】:如果您很懒惰并且不想与字符串文字打架,您可以使用parser
模块。
from dateutil import parser
dt = parser.parse("Jun 1 2005 1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0
只是附注,因为我们试图匹配 any
字符串表示,它比 strptime
慢 10 倍
【讨论】:
非常简单的解决方案,谢谢。我试图转换显示为Monday, June 03, 2019
的 Excel 长日期【参考方案5】:
你有一个像这样的日期字符串,“24052010”,你想要这个日期对象,
from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()
这个 cus_date 会给你日期对象。
您可以使用它从您的日期对象中检索日期字符串,
cus_date.strftime("%d%m%Y")
【讨论】:
【参考方案6】:对于单个值,datetime.strptime
方法最快
import arrow
from datetime import datetime
import pandas as pd
l = ['24052010']
%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.86 µs ± 56.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
305 µs ± 6.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
46 µs ± 978 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
对于值列表,pandas pd.to_datetime
是最快的
l = ['24052010'] * 1000
%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.32 ms ± 89.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
1.76 ms ± 27.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
44.5 ms ± 522 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
对于 ISO8601 日期时间格式,ciso8601
是火箭
import ciso8601
l = ['2010-05-24'] * 1000
%timeit _ = list(map(lambda x: ciso8601.parse_datetime(x).date(), l))
241 µs ± 3.24 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
【讨论】:
【参考方案7】:还有另一个名为 arrow
的库非常适合在 python 日期上进行操作。
import arrow
import datetime
a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True
【讨论】:
【参考方案8】:使用时间模块转换数据。
代码sn-p:
import time
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
【讨论】:
以上是关于Python日期字符串到日期对象的主要内容,如果未能解决你的问题,请参考以下文章
仅在 Python 中将 datetime 对象转换为日期字符串