这是一个分步过程.
允许用户从Olson时区数据库中选择他们的时区.如果您使用的是Linux或其他Unices,它可能已安装在您的计算机上.
将所有日期和时间存储为UTC.没有例外.
当用户请求页面,加载页面并在需要格式化时间时,使用用户的时区首选项并使用时区感知格式化功能.PHP和Python都有以合理的方式存储日期和时间的方法.
Haluk有一个很好的例子来说明如何使用PHP的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) ;
}
}
Run Code Online (Sandbox Code Playgroud)
在Python中,使用pytz库,它也应该已经安装在您的服务器上(同样,假设为*nix).如果不是,请让您的系统管理员安装它(发行版通常会自定义它以使用内置时区数据库),或者只是安装它easy_install.pytz提供了很好的用法示例.你会想要使用这个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'
Run Code Online (Sandbox Code Playgroud)
每次格式化用户阅读时间时都要这样做.