截断一个python datetime对象的经典方法是什么?

在这种特殊情况下,到今天为止。基本上就是将小时,分,秒,微秒设置为0。

我希望输出也是一个datetime对象,而不是字符串。


当前回答

四年后:另一种方法,避免更换

我知道四年前接受的答案是有效的,但这似乎比使用replace更轻松:

dt = datetime.date.today()
dt = datetime.datetime(dt.year, dt.month, dt.day)

笔记

当您创建一个datetime对象而没有将时间属性传递给构造函数时,您将得到midnight。 正如其他人所指出的,这假设您想要一个datetime对象,以便以后与timedelta一起使用。 当然,您可以将第一行替换为:dt = datetime.datetime.now()

其他回答

你可以用

datetime.date.today()

它很轻,而且完全符合你的要求。

你可以使用datetime。Strftime提取日,月,年…

例子:

from datetime import datetime
d = datetime.today()

# Retrieves the day and the year
print d.strftime("%d-%Y")

输出(今天):

29-2011

如果你只是想检索日期,你可以使用day属性:

from datetime import datetime
d = datetime.today()

# Retrieves the day
print d.day

输出(今天):

29

如果你不关心时间,就用date而不是datetime。

>>> now = datetime.now()
>>> now.date()
datetime.date(2011, 3, 29)

你可以像这样更新datetime:

>>> now.replace(minute=0, hour=0, second=0, microsecond=0)
datetime.datetime(2011, 3, 29, 0, 0)
>>> import datetime
>>> dt = datetime.datetime.now()
>>> datetime.datetime.date(dt)
datetime.date(2019, 4, 2)

我觉得这就是你要找的…

>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt = dt.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy
>>> dt
datetime.datetime(2011, 3, 29, 0, 0)

但如果你真的不关心时间方面的事情,那么你真的应该只传递日期对象……

>>> d_truncated = datetime.date(dt.year, dt.month, dt.day)
>>> d_truncated
datetime.date(2011, 3, 29)