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() 对我来说可以很好地使用 secondmicrosecond 关键字参数,请确保您有一个 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中指定时区的午夜[重复]

如何更改 django 日期时间格式输出?

检查日期范围的最快方法

Django/Python 在 DateTimeField 上设置最小/最大日期值

在 Python 中将日期转换为日期时间

如何在 R 中为日期添加时间(午夜)并在没有 1 或 2 小时班次的情况下打印它?