Symfony 2在自己的DateTimeToLocalizedStringTransformer中使用intlDateFormatter 但是工作不正常。
$tz = new DateTimeZone('Europe/Moscow');
$date = new DateTime('1 march', $tz);
echo "PHP: " . phpversion() . "<br/>\n";
echo "Intl: " . phpversion('intl') . "<br/>\n";
echo "<br/>\n";
echo "TZ: " . $tz->getName() . "<br/>\n";
echo "Native:<br/>\n";
echo $date->format('H:i:s d.m.Y');
echo "<br/>\n";
echo "Intl:<br/>\n";
$formatter = new IntlDateFormatter('RU_ru', IntlDateFormatter::FULL, IntlDateFormatter::FULL, $tz->getName());
echo $formatter->format($date);
echo "\n";
我有结果
PHP: 5.3.22-1~dotdeb.0
Intl: PECL-2.0.1
TZ: Europe/Moscow
Native:
00:00:00 01.03.2013
Intl:
28 february 2013 23:00:00
我试试
pecl install timezonedb
pecl install intl
并重新安装libicu44
答案 0 :(得分:1)
我明白了:
<?php
$tz = new DateTimeZone('UTC');
$date = new DateTime('1 march', $tz);
echo "ICU data version: ", INTL_ICU_DATA_VERSION, "\n";
$formatter = new IntlDateFormatter('RU_ru', IntlDateFormatter::FULL,
IntlDateFormatter::FULL, "Europe/Moscow");
echo $formatter->format($date), "\n";
ICU data version: 4.4.0.1 пятница, 1 марта 2013 г. 3:00:00 Московское стандартное время
这是错误的,因为莫斯科现在全年都在UTC + 4。然而,这是一个相当近期的发展(他们仅在几年前放弃了DST),因此ICU数据太旧而无法反映这一点。如果您使用更新版本的ICU进行测试,则会得到正确的结果:
ICU data version: 49.1 пятница, 1 марта 2013 г., 4:00:00 Московское стандартное время