django python 日期时间设置为午夜
Posted
技术标签:
【中文标题】django python 日期时间设置为午夜【英文标题】:django python date time set to midnight 【发布时间】:2012-01-11 18:20:13 【问题描述】:我有我的 django 对象的日期时间,但它可以是一天中的任何时间。可以是一天中的任何时间,但我需要将时间设置为 00:00:00(另一个日期设置为 23:59:59,但原则相同)
end_date = lastItem.pub_date
目前结束日期为 2002-01-11 12:34:56 我需要做什么才能将其更改为 00:00:00?
我试过了:
end_date.hour = '00'
但得到:'datetime.datetime' 对象属性 'time' 是只读的
【问题讨论】:
你需要一个初始化为 00:00:00 的日期时间变量吗? 相关:How do I get the UTC time of “midnight” for a given timezone? 【参考方案1】:对于 tz 感知日期,它应该是:
datetime.combine(dt.date(), datetime.min.time(), dt.tzinfo)
【讨论】:
@LidiyaParshina 有更好的方法吗?【参考方案2】:将日期时间的“组合”与 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)
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)
【讨论】:
【参考方案3】:datetime
年、月、日、小时等实例属性为read-only,因此您只需创建一个新的datetime
对象并将其分配给end_date
。
【讨论】:
【参考方案4】:试试这个:
import datetime
pub = lastItem.pub_date
end_date = datetime.datetime(pub.year, pub.month, pub.day)
【讨论】:
另一种选择是end_date.replace(hour=0, minute=0, second=0)
。
为了确保它完全归零,您可能需要在 F.J 的建议中添加 microsecond=0。例如,当您将 datetime.now() 的时间部分归零时。
@F.J 你确定吗?当我这样做时,我得到“'second' is an invalid keyword argument for this function”(或“小时”或“分钟”)。它是一个日期时间对象而不是日期。也许我做错了什么。
@RThiede datetime.datetime.replace()
对我来说可以很好地使用 second
和 microsecond
关键字参数,请确保您有一个 datetime.datetime
实例而不是 datetime.date
。
@AndrewClark:1. 你在第一条评论中忘记了microsecond
。 2. .replace()
可能会为感知的日期时间对象返回一个未标准化的值,这可能会在 DST 转换周围引入 ~1h 错误。 .combine()
和 datetime()
方法都会剥离时区信息,以便您可以 add the correct value instead of using by accident a possibly incorrect value returned by .replace()
【参考方案5】:
您确定不想使用日期来代替日期时间吗?如果您总是将时间设置为午夜,则应考虑使用日期。如果你真的想使用日期时间,这里有一个函数可以在午夜获得同一天:
def set_to_midnight(dt):
midnight = datetime.time(0)
return datetime.datetime.combine(dt.date(), midnight)
【讨论】:
对于午夜我会使用 86400 而不是 0 吗?这看起来很有希望midnight = datetime.time(23, 59, 59)
其实,你可能想使用 datetime.datetime.max(或 min)。
datetime.combine(dt.date(), datetime.min.time())
为我工作以上是关于django python 日期时间设置为午夜的主要内容,如果未能解决你的问题,请参考以下文章
如何确保保存在数据库中的UTC日期等于Django中指定时区的午夜[重复]