如何在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中获取时区感知午夜日期时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何确保保存在数据库中的UTC日期等于Django中指定时区的午夜[重复]