Python - 从Datetime字符串中删除时间

问题描述 投票:28回答:5

我有一个日期字符串,并希望将其转换为日期类型:

我试图使用datetime.datetime.strptime和我想要的格式,但它返回转换的时间。

    when = alldates[int(daypos[0])]
    print when, type(when)

    then = datetime.datetime.strptime(when, '%Y-%m-%d')
    print then, type(then)

这是输出返回的内容:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>

我需要删除时间:00:00:00。

python python-2.7 datetime strptime
5个回答
50
投票
print then.date()

你想要的是一个datetime.date对象。你拥有的是datetime.datetime对象。您可以按照上面的方式更改对象,也可以在创建对象时执行以下操作:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()

5
投票
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>

2
投票

如果您需要结果是时区感知的,可以使用replace()对象的datetime方法。这可以保留时区,所以你可以做到

>>> from django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)

请注意,这将返回一个新的日期时间对象 - now保持不变。


1
投票

要将字符串转换为日期,AFAIK最简单的方法是dateutil模块:

import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")

它还可以处理时区:

print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())

如果你有一个datetime对象,请说:

import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)

并且你想要砍掉时间部分,然后我认为构造一个新对象而不是“减去时间部分”更容易。它更短更防弹:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)

它还保留时区信息,比timedelta减法更容易阅读和理解,并且您还可以选择在同一步骤中给出不同的时区(这是有道理的,因为您无论如何都会有零时间部分) 。


0
投票

对我来说,我需要保持一个时间对象,因为我使用的是UTC,这有点痛苦。所以,这就是我最终做的事情:

date = datetime.datetime.utcnow()

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond
)

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59
)

示例输出:

>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)
© www.soinside.com 2019 - 2024. All rights reserved.