php timezone:DateTime :: createFromFormat忽略时区

时间:2016-03-24 12:35:16

标签: php datetime

我在debian 8上使用php 5.6.17。设置了owncloud之后,我注意到了,那个 由owncloud(而非apache)自行编写的日志具有错误的时区。

我调查了一下,似乎就是这条线:

DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", ""), 'Europe/Berlin');

这并不关心任何时区设置。而不是欧洲/柏林(+ 1 / + 2)的时间,我总是得到UTC的时间。

/etc/php5/apache2/php.ini我设置"date.timezone = "Europe/Berlin",系统时间(debian)也正确。

即使我运行如下的东西,我也得到相同的输出(UTC):

 $time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('UTC'));
 echo $time->format('c') . "\n";
 $time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('Europe/Berlin'));
 echo $time->format('c') . "\n";

关于这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

引用PHP manual on DateTime::createFromFormat()

  

注意:   当time参数包含UNIX时间戳(例如946684800)或指定时区(例如2010-01-28T15:00:00 + 02:00)时,将忽略timezone参数和当前时区。

如果要更改时区,则必须在创建对象后使用setTimezone()方法。

答案 1 :(得分:2)

不幸的是,用microtome创建时会忽略tz。使用setTimezone fnc:

$micro = microtime(true);
$dt = DateTime::createFromFormat('U.u', $micro);
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));