【问题标题】:Compare Django TimeField into timezone aware datetime; compare naive time with timezone.now()将 Django TimeField 与时区感知日期时间进行比较;将幼稚时间与 timezone.now() 进行比较
【发布时间】:2017-06-28 05:22:27
【问题描述】:

我在整个应用程序中使用时区感知对象,除非我有一个 TimeField 来表示一天中的通用时间:

class MyModel(models.Modal):
   ...
   start_time = models.TimeField()

但是,在某些时候,我需要使用服务器的时区将当前时间:timezone.now() 与 start_time 进行比较,以查看任何一天的时间是否已经过去。

如何将start_time 转换为可与timezone.now() 进行比较的时区感知日期时间对象?

我正在使用USE_TZ = True

【问题讨论】:

  • 你试过 localize() 或 as_timezone() 吗?
  • 另外,开始时间是如何创建的?作为一个天真的日期时间或时区意识的人?
  • 另外,你为什么不使用日期时间字段?
  • 在这行代码中创建:start_time = models.TimeField()
  • @deweyredman TimeField 而不是 DateTimeField,因为我不想更改所有默认小部件和验证,使其看起来像 DateField。这应该代表每天的特定时间。说下午2点。并且与特定日期无关。

标签: python django datetime pytz


【解决方案1】:

这是一个简单的方法:

from django.utils.timezone import now, localtime

if model.start_time >= localtime().time():
    # do stuff

请注意,localtime() 使用当前时区,如果未明确设置,则为默认时区。如果这不是您想要的,您可以指定所需的时区作为localtime() 的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多