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 对象转换为日期字符串

python模块datetime将字符串转换为日期

python 将中文日期字符串更改为datetime对象

将 Python Pandas 中的列名从日期时间对象更改为字符串?

将 JSON 日期字符串转换为 Python 日期时间

Python将字符串转换为本地日期时间到UTC日期时间