gpt4 book ai didi

php - 调整时区和 DST

转载 作者:行者123 更新时间:2023-11-29 03:55:37 25 4
gpt4 key购买 nike

在我的网站上,用户可以为他们当前的时区设置首选项。我的数据库中有一堆日期时间,但我想每次都适本地显示,给定 A) 它们所在的时区,以及 B) 夏令时是否生效。

解决这个问题的最佳方法是什么?

最佳答案

这是一个多步骤的过程。

  1. 允许用户从 Olson timezone database 中选择他们的时区.如果您使用的是 Linux 或其他 Unices,它可能已经安装在您的机器上。

  2. 所有 日期和时间存储为 UTC。没有异常(exception)。

  3. 当用户请求一个页面时,将其加载,当您需要格式化时间时,使用用户的时区首选项并使用时区感知格式化功能。 PHP 和 Python 都有以合理方式存储日期和时间的方法。

    Haluk has a good example of how to use PHP's DateTimeZone.但是,如果您使用的是在请求中只使用一个时区的遗留代码,则可以使用类似这样的代码;这是我在自定义 PunBB 以正确显示时区时使用的(我已经从那里开始......)

    /**
    * Sets up the timezone system. $timezone is the timezone. In PunBB, this is
    * called by setup_dates($pun_user['timezone']) in common.php.
    *
    * DON'T USE THIS unless you can't use PHP's DateTime module.
    */
    function setup_dates($timezone) {
    if(function_exists('date_default_timezone_set')) {
    date_default_timezone_set($timezone) ;
    } else {
    putenv('TZ='.$timezone) ;
    }
    }

    在 Python 中,使用 pytz库,它也应该已经安装在您的服务器上(同样,假设是 *nix)。如果不是,请让您的系统管理员安装它(发行版通常会自定义它以使用内置时区数据库),或者使用 easy_install 安装它。 pytz 提供了很好的 usage examples .您需要使用 astimezone 方法:

    >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
    >>> loc_dt = utc_dt.astimezone(eastern)
    >>> loc_dt.strftime(fmt)
    '2002-10-27 01:00:00 EST-0500'

    每次设置时间格式供用户阅读时都执行此操作。

关于php - 调整时区和 DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com