尽管时区有效,但设置默认时区不起作用

Posted

技术标签:

【中文标题】尽管时区有效,但设置默认时区不起作用【英文标题】:Setting default timezone does not work despite timezone being valid 【发布时间】:2012-02-04 11:08:29 【问题描述】:

我只是在做 phpinfo() 时得到的

警告:phpinfo():依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们在第 8 行的 /myadmin/i.php 中为“EET/2.0/no DST”选择了“Europe/Helsinki”

这里是 i.php:

<?php
//echo date_default_timezone_get();

date_default_timezone_set("Europe/Kiev");

//echo date("l");

phpinfo();
?>

如您所见,当我执行 date_default_timezone_set("Europe/Kiev") 时,我得到:

注意:date_default_timezone_set():时区 ID 'Europe/Kiev' 在 /myadmin/i.php 第 4 行无效

我确定我使用的是来自here 的有效时区字符串,并且我确实设置了:

date.timezone = 欧洲/基辅

在 php.ini 文件中。

环境:CentOS 6,nginx/1.1.11,PHP 5.3.8 (fpm-fcgi)

我真的不明白这是怎么回事。 谢谢。

【问题讨论】:

date_default_timezone_set('Europe/Kiev'); 返回什么? should 成功返回true,失败返回false 其他时区有效吗?你可以试试php.net/manual/en/datetimezone.listidentifiers.php 给出的例子来打印所有支持的时区吗? 不知何故 DateTimeZone::listIdentifiers() 返回 array(0) HOW ? "可以通过 PECL 的 » timezonedb 安装最新版本的时区数据库。" php 使用的时区数据库 (Olson DB) 存在一些法律问题。但是我不知道这对 PHP 有什么影响。 【参考方案1】:

感谢 cmets,我能够解决我的问题。我在控制台中做了什么:

#yum install php-pear

#pecl install timezonedb

需要c编译器:

configure: error: no acceptable C compiler found in $PATH

...所以我做了:

#yum install gcc

另外, 如果您收到有关 make 命令的错误,只需运行

#yum install make

最后,再试一次:

#pecl install timezonedb

...它显示在末尾:

You should add "extension=timezonedb.so" to php.ini

我在/etc/php.ini中添加了“extension=timezonedb.so”,并重启了php-fpm:

#/etc/init.d/php-fpm restart

【讨论】:

在运行pecl之前,你需要phpize,它要安装php-devel #yum install php-devel【参考方案2】:

为了扩展 futureboxlab 的解决方案,如果您没有安装 make,您可能会遇到另一个关于“make”命令的错误。 在这种情况下,您只需要运行

#yum install make

然后,再一次(第三次的魅力)

#pecl install timezonedb

【讨论】:

以上是关于尽管时区有效,但设置默认时区不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Django如何设置默认时区?

django 默认时区设置

.getDay() 在将日期转换为特定时区时不起作用

Django 时间与时区设置问题

Django 时间与时区设置问题

solr 时区问题