10月26日のロシアの時間変更とicu4c

多くの人が既にお気に入りのディストリビューションにtzdata更新プログラムをインストールしており、2014年10月26日の午前3時にすべてを感じることができる世界終わりを楽しみにしています。



しかし、PHPで記述してSymfony Formsを使用する場合、またはphp-intlを使用する場合は、すべて大丈夫ですか?

私の答えはノーです。



簡単に確認できます:



<?php $dateIn = '27.10.2014'; $tz = 'Europe/Moscow'; date_default_timezone_set($tz); $intlDateFormatter = new \IntlDateFormatter('ru_RU', 2, -1, $tz, 1, 'dd.MM.yyyy'); $timestamp = $intlDateFormatter->parse($dateIn); var_dump($intlDateFormatter->format($timestamp)); var_dump(date('dmY', $timestamp));
      
      





Debian Wheezy、CentOS 6では、tzdataの更新後、このコードは次を出力します。

 string(16) "27.10.2014" string(16) "26.10.2014"
      
      





これは、 icuライブラリには独自のタイムゾーンデータベースがあり(これは一般的なアクティビティです。たとえば、php、java、chrome、および他のソフトウェアのキャリッジも実行します)、unixタイムスタンプの日付を再計算すると、4時間かかり、php date関数は追加するだけです3、また、日付を入力するフィールドしかない場合は、時間を削除した後、入力した日付から1日少なくなります。



状況は、このデータがlibicudataライブラリーの形式で保管されているという事実により悪化しているため、ソースからicuを収集する準備をしてください。



その後、すべてのアクションは、CentOS 6.5 + remi + libicu-lastを実行する別のVMで実行されます。



パッケージのバージョンに応じて、icuバージョン-50.1.2( icu Webサイトのソース )を判別し、ここからすべての* .resファイルをダウンロードします。ここで(リンク内)

2014i-tzdataのバージョン。

44-libicuのバージョン(44以上)

le-リトルエンディアン(mipsアームなどがある場合は、別のリソースセットが必要になる場合があります)。



 tar -zxf icu4c-50_1_2-src.tgz cd icu/source mkdir bin ./configure #   icupkg cd tools/icupkg/ make cd ../../ #     cd data/in/ #              ../../bin/icupkg -a zoneinfo64.res icudt50l.dat ../../bin/icupkg -a metaZones.res icudt50l.dat ../../bin/icupkg -a timezoneTypes.res icudt50l.dat ../../bin/icupkg -a windowsZones.res icudt50l.dat #     cd ../../ make
      
      





原則として、ここで停止し、アセンブリ後にシステムの/ usr / lib64 /のライブラリを新しいバージョンの./lib/libicudata.so.50.1.2に置き換えます。



パッケージをまとめました:



 yum install rpmrebuild rpmrebuild -e -p --notest-install libicu-last-50.1.2-10.el6.remi.x86_64.rpm
      
      





行ごと
 BuildRoot: /root/.tmp/rpmrebuild.42406/work/root
      
      



アンパックされたパッケージファイルの場所を特定し、libicudataを最新バージョンに置き換えます。バージョンを変更しなかったため、結果のパッケージ(ビルド後にrpmbuildがフルパスを書き込む)を--forceスイッチでインストールできます。



ご清聴ありがとうございました!



UPD: Ubuntuユーザー(Trusty | Precise)は、 ranzheハブユーザーppaで既製のパッケージを取得できます。



All Articles