【问题标题】:Make a string with a UTC+1 date aware制作一个具有 UTC+1 日期感知的字符串
【发布时间】:2020-03-26 19:45:17
【问题描述】:
from datetime import datetime
from django.utils.timezone import make_aware

str_date = "02-05-2020 15:59" # UTC+1
dt = make_aware(datetime.strptime(str_date, '%d-%m-%Y %H:%M'))
print(dt)

使用打印 2020-05-02 15:59:00+00:00 的上述代码。它不应该减去 1 小时并打印 2020-05-02 14:59:00+00:00 吗?

TIME_ZONE = 'UTC' 和 USE_TZ = True in settings.py。

这会从我的 Ubuntu 机器日期中减去 1 小时

from django.utils import timezone

now = timezone.now()
print(now)

【问题讨论】:

  • 它怎么知道是UTC+1?您只是将其写为评论。默认情况下,make_aware() 使用您的默认时区,即您所说的 UTC。
  • @KevinChristopherHenry 这与我的机器时间格式相同,即 UTC+1。
  • 不过,操作系统的时间与解析日期无关。你写了一个日期时间字符串,把它转换成一个简单的日期时间,然后让 Django 让它知道使用 UTC 时区。所以 UTC+1 没有涉及。如果您想使用不同的时区,请参阅make_aware() 的文档。
  • 你解决了吗?我在下面提供了答案

标签: python django python-3.x


【解决方案1】:

您可以使用datetime.replace 设置tzinfo 属性

    from datetime import datetime, timezone, timedelta

    offset = {'hours':1}
    str_date = "02-05-2020 15:59" # UTC+1

    unaware_dt = datetime.strptime(str_date, '%d-%m-%Y %H:%M')  
    # datetime.datetime(2020, 5, 2, 15, 59)

    aware_dt = unaware_dt.replace(tzinfo=timezone(timedelta(**offset)))  
    # datetime.datetime(2020, 5, 2, 15, 59, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))

要验证,请查看它的偏移量与同一时间但在 UTC 中

   import pytz
   difference = unaware_dt.replace(tzinfo=pytz.UTC) - aware_dt
   print(difference.seconds) # 3600 seconds or 1 hour

【讨论】:

    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多