时区 - 使非UTC日期时间时区可识别

时间:2014-03-11 15:17:48

标签: python django timezone

我有一个案例,我获得CET日期时间(通过我的API),我想将其保存在我的django数据库中。

当我这样做时,我总是收到运行时警告:

datetime.fromtimestamp(last_content_update)

当我添加replace部分时,我没有收到错误但我的日期不正确(1小时轮班):

datetime.fromtimestamp(last_content_update).replace(tzinfo=utc)

知道如何加载我的日期时间时区吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

好的,最后我发现fromtimestamp()需要一个时区参数!

就这样做:

datetime.fromtimestamp(last_content_update, tz=pytz.timezone("Europe/Paris"))

Here is a link到文档。

答案 1 :(得分:0)

您需要分两步完成此操作:

  1. 首先,在您的情况下,使用CET(中欧时间)时区,使日期时间感知区域。
  2. 其次,在保存之前将日期时间转换为UTC。这是因为Django stores datetimes as UTC
  3.   

    当启用对时区的支持时,Django会存储日期时间   数据库中的UTC信息......

    这可以这样做:

    import pytz    
    from django.utils import timezone
    
    # Convert the naive datetime into a CET datetime
    local_datetime = timezone.make_aware(naive_datetime, pytz.timezone('CET'))
    
    # Convert the CET datetime to UTC
    utc_datetime = local_datetime.astimezone(timezone.utc)
    
    # Now it can be saved in the database on a model field
    MyDateModel.objects.create(title='Another date model',
                               created=utc_datetime)