【问题标题】:Python Convert time to UTC formatPython将时间转换为UTC格式
【发布时间】:2014-09-02 19:36:36
【问题描述】:
from django.utils import timezone
time_zone = timezone.get_current_timezone_name() # Gives 'Asia/Kolkata'
date_time = datetime.time(12,30,tzinfo=pytz.timezone(str(time_zone)))

现在我需要将这个时间转换为 UTC 格式并保存在 Django 模型中。我无法使用date_time.astimezone(pytz.timezone('UTC'))。如何将时间转换为 UTC。也回到'time_zone'。

这是一个用户在文本框中输入时间的用例,我们需要以 UTC 格式保存时间。每个用户还将选择我们从 Django timezone 模块提供的自己的时区。

一旦用户请求返回保存的时间,它必须在他选择的时区显示给他。

【问题讨论】:

    标签: python django datetime timezone


    【解决方案1】:

    这些事情总是使用完整的datetime 对象更容易,例如:

    import datetime
    import pytz
    
    time_zone = pytz.timezone('Asia/Kolkata')
    
    # get naive date
    date = datetime.datetime.now().date()
    # get naive time
    time = datetime.time(12, 30)
    # combite to datetime
    date_time = datetime.datetime.combine(date, time)
    # make time zone aware
    date_time = time_zone.localize(date_time)
    
    # convert to UTC
    utc_date_time = date_time.astimezone(pytz.utc)
    # get time
    utc_time = utc_date_time.time()
    
    print(date_time)
    print(utc_date_time)
    print(utc_time)
    

    产量:

    2014-07-13 12:30:00+05:30
    2014-07-13 07:00:00+00:00
    07:00:00
    

    现在对我来说。

    【讨论】:

    • 它在尚未应用于datetime 时显示+5:53:00,因为这是tzdb 中最早的表示。当地平均时间通常是根据太阳观测计算得出的,这合理地将这些旧日期与我们的现代系统对齐。
    • 另外,您应该使用localize,而不是直接将时区分配给tzinfo。在the pytz docs 中了解localize
    • @MattJohnson 感谢您的反馈和 +5:53 的解释!确实是关于localize。相应地更新了答案,现在这就是我们想要的。
    【解决方案2】:

    在您的 settings.py 中将时区设置为 UTC。以特定格式获取用户输入的时间和时区。假设您将用户时间设为“Jul-7-2014 12:35PM:30”(考虑在 html 中使用日期输入)。

    from datetime import datetime, timedelta
    
    // convert the time to standard format
    user_date = datetime.strptime('Jul-7-2014 12:35PM:30', '%b-%d-%Y %I:%M%p:%S')
    user_date_string = user_date.strftime('%Y-%m-%d %H:%M:%S')
    // save the time to model with users timezone
    
    // now when user asks back for his time, add the timezone with timedelta
    user_date = datetime.strptime(user_date_string, '%Y-%m-%d %H:%M:%S') 
    user_date = user_date + timedelta(hours = 5, minutes = 30)
    // finally display it
    print user_data.strftime('%Y-%m-%d %H:%M:%S')
    

    *这没有考虑 django inbuild datetime 函数,它返回 datetime 模型字段的 datetime 对象。如果实现会更简单

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2018-09-08
      • 1970-01-01
      • 2021-10-14
      • 2019-09-26
      • 2015-10-01
      • 2017-04-27
      相关资源
      最近更新 更多