django python日期时间设置为午夜

Des*_*023 32 python django datetime date date-manipulation

我有django对象的日期时间,但它可以是一天中的任何时间.它可以在一天中的任何时间,但我需要将我的时间设置为00:00:00(和另一个日期到23:59:59,但原理将是相同的)

end_date = lastItem.pub_date
Run Code Online (Sandbox Code Playgroud)

目前结束日期是2002-01-11 12:34:56我需要做什么才能将它改为00:00:00?

我试过了:

end_date.hour = '00'
Run Code Online (Sandbox Code Playgroud)

但得到:'datetime.datetime'对象属性'time'是只读的

mip*_*adi 45

试试这个:

import datetime
pub = lastItem.pub_date
end_date = datetime.datetime(pub.year, pub.month, pub.day)
Run Code Online (Sandbox Code Playgroud)

  • 另一种方法是`end_date.replace(小时= 0,分钟= 0,秒= 0)`. (55认同)
  • 为了确保它完全归零,您可能需要将微秒= 0添加到FJ的建议中.例如,当你将datetime.now()的时间部分归零时. (12认同)
  • @AndrewClark:1.您在第一条评论中忘记了“微秒”。2.`.replace()`可能为已知的日期时间对象返回一个非标准化的值,该值可能会在DST转换周围引入〜1h错误。.combine()和datetime()方法都剥离时区信息,因此您可以[添加正确的值,而不是偶然使用`.replace()返回的可能不正确的值]](http:// stackoverflow.com/a/11236372/4279) (2认同)

ram*_*man 41

使用datetimes的"combine"与time.min和time.max将同时提供两个日期时间.例如:

from datetime import date, datetime, time
pub_date = date.today()
min_pub_date_time = datetime.combine(pub_date, time.min) 
max_pub_date_time = datetime.combine(pub_date, time.max)  
Run Code Online (Sandbox Code Playgroud)

pub_date为2013年6月5日的结果:

min_pub_date_time - > datetime.datetime(2013,6,5,0,0)

max_pub_date_time - > datetime.datetime(2013,6,5,23,59,59,999999)


Gav*_*ahl 21

您确定不想使用日期而不是日期时间吗?如果您总是将时间设置为午夜,则应考虑使用日期.如果你真的想使用日期时间,这里有一个函数可以在午夜获得同一天:

def set_to_midnight(dt):
    midnight = datetime.time(0)
    return datetime.datetime.combine(dt.date(), midnight)
Run Code Online (Sandbox Code Playgroud)


Ant*_*ins 9

对于 tz-aware 日期,它应该是:

datetime.combine(dt.date(), datetime.min.time(), dt.tzinfo)
Run Code Online (Sandbox Code Playgroud)