8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Django:如何使日期时间对象知道其创建时的时区?

michaelmeyer 1月前

25 0

我正在运行一个程序,该程序从远程服务器请求海洋潮汐数据。此潮汐数据的时间和日期是根据我的机器的本地时区计算的。我想使用这些本地数据...

我正在运行一个程序,该程序从远程服务器请求海洋潮汐数据。 time date 时间是根据我机器的本地时区计算的。我想使用这些本地日期和时间来创建一个 datetime 对象,然后将其保存在 Django 模型中。

datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)

如何确保 datetime 对象知道它是基于本地时区创建的?

我想,在发布之前我希望它看起来像这样:

datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute, loc_timezone)

如何动态获取我机器的本地时区?以及如何确保所有用户都能看到转换为他们自己本地时区的时间。

帖子版权声明 1、本帖标题:Django:如何使日期时间对象知道其创建时的时区?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由michaelmeyer在本站《datetime》版块原创发布, 转载请注明出处!
最新回复 (0)
  • yolo 1月前 0 只看Ta
    引用 2

    -- 这就是问题所在。不要使用本地时区,而是使用 UTC 时区或 POSIX 时间戳。如果您愿意,您可以存储本地时间

  • 首先,请确保你熟悉 Django 、设置 和安装 USE_TZ = True 文档 pytz .

    我不太明白你的日期是从哪里来的。如果它是作为服务器数据的一部分来自服务器的(即它表示测量潮汐的时间),它应该已经是 UTC 时间,或者你需要知道他们使用的时区。如果你正在创建它,那么最简单的方法就是在创建模型实例时使用 django.utils.timezone.now() (它返回一个时区感知的日期时间)。

    如果您确实需要按照描述手动创建它,请按照 此处的 或使用 make_aware() :

    from django.utils.timezone import make_aware
    
    naive = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
    aware = make_aware(naive, timezone=pytz.timezone("Europe/Helsinki"))
    # can leave off the timezone parameter if converting to the current timezone
    

    当前时区是默认时区(由 TIME_ZONE 设置定义),除非您使用 activate() 此答案 pytz 讨论了 以可理解的格式获取系统时区 .

    最后,确保用户看到的时间转换为其当地时区并非易事,如下 所述 :

    当前时区相当于翻译的当前语言环境。但是,Django 没有与 Accept-Language HTTP 标头等效的标头,无法自动确定用户的时区。相反,Django 提供了时区选择函数。使用它们来构建对您有意义的时区选择逻辑。

    请参阅那里的示例以获取指导。

  • 自 4.0 版起已弃用:docs.djangoproject.com/en/4.0/ref/utils/…

  • 那么,也许他们应该更好地表述它(我的建议)。\'自 4.0 版起已弃用:\' 误导了我。

  • from django.utils import timezone
    import pytz
    
    timezone.activate(pytz.timezone("Asia/Kolkata"))
    timezone.localtime(timezone.now())
    
返回
作者最近主题: