如何在python中获取时区感知午夜日期时间? [复制]

Posted

技术标签:

【中文标题】如何在python中获取时区感知午夜日期时间? [复制]【英文标题】:how to get timezone-aware midnight datetime in python? [duplicate] 【发布时间】:2013-07-18 12:28:25 【问题描述】:

我在 django 工作,但标准的 python 解决方案也可以。

我正在将使用naive-datetime 的代码转换为aware-datetime。

以下是原代码:

today = datetime.today()
MyClass.objects.filter(datetimefield__range=(today, today+datetime.timedelta(1)) )

如何将其转换为使用时区感知时间?

如果本地时间是 6 月/3 日/晚上 7 点 20 分, 我想获得[jun/3rd/00:00am, jun/4th/00:00am] 的日期时间范围 (午夜到午夜,其中将包括now

【问题讨论】:

午夜应该在哪个时区? UTC、服务器时区还是您网站访问者的时区? 我建议使用 dateutil 库 - labix.org/python-dateutil @JanSpurny:不,这是一个很棒的解析和相对日期算术库。但是Django supports pytz 开箱即用,为什么不坚持呢? 【参考方案1】:

我知道这已经很老了,但是使用 django.utils.timezone 这相当简单。 (在我看来,关于时区的任何事情都不是一件容易的事)

# this is could be any datetime.date
my_date = timezone.now().date()
dt_at_local_midnight = timezone.make_aware(
    timezone.datetime.combine(my_date, time.min), 
    timezone.get_current_timezone())

下面的第一条评论中列出了可能更好的替代方案。

【讨论】:

第一个例子不正确。它可能会创建一个未标准化的时间(错误的偏移量)(.replace() 方法可能会跨越 UTC 转换边界)。第二个示例无法识别模棱两可或不存在的时间 - 它默默地返回 some 值(在大多数情况下都可以,但您应该注意这一点)。请参阅my answer to the duplicate question,它在这种情况下引发异常作为替代方案。 这是有道理的.. 编辑答案,并试图想办法给予信任,正在寻找本地化方法。

以上是关于如何在python中获取时区感知午夜日期时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中获取随机时区感知日期时间

如何在 Python 中结合时区感知日期和时间?

如何在 django 中获取时区感知日期?

如何确保保存在数据库中的UTC日期等于Django中指定时区的午夜[重复]

Python - 给定一个时区感知的日期时间对象,我如何获得一个时区朴素的 UTC 日期时间对象?

如何在 SqlAlchemy / Mysql 中存储时区感知日期时间值?