ラベル datetime の投稿を表示しています。 すべての投稿を表示
ラベル datetime の投稿を表示しています。 すべての投稿を表示

2010年3月3日水曜日

VMware上の Linux (CentOS)のシステム時刻が狂うのを防ぐ

詳しくはVMwareの時刻あわせ 2008年冬版 - SH2の日記にまとまっている。(本当に詳しい。)
これ以外だと古いやり方を説明しているサイトが多い。


とりあえずある程度それらしい時間になってればOKなら、下記だけでもOKみたい。

  1. /boot/grub/grub.conf を編集し、下記の箇所にパラメータを追加する。

    title CentOS (2.6.18-164.11.1.el5)
    root (hd0,0)
    kernel /vmlinuz-(中略) quiet divider=10 clocksource=acpi_pm
    initrd /initrd-2.6.18-164.11.1.el5.img
    これでLinuxを再起動するとシステム時刻のズレがかなり小さくなる。
    (参考:VMwareの時刻あわせ 2008年冬版 - SH2の日記の「4. CentOS 5.2のカーネルパラメータを変更する」)
  2. /etc/ntp.conf を編集し、同期するサーバを日本のntpサーバに変更する。

    #server 0.centos.pool.ntp.org
    #server 1.centos.pool.ntp.org
    #server 2.centos.pool.ntp.org
    server ntp.nict.jp
    centos.pool.ntp.orgの3つはコメントアウトし、ntp.nict.jpとかインターネットマルチフィード(MFEED) 時刻情報提供サービス for Publicにする。
  3. ntpdが起動していない場合は起動する。

    /etc/init.d/ntpd start
    ブート時に起動するようになっていない場合はブート時に起動するようにする。

    /sbin/chkconfig ntpd on

2009年1月26日月曜日

PHPの DateTimeZoneオブジェクトで時差のある時間を計算

日本の時間でDateTimeオブジェクトを生成して、時差のある地域の現地時間を求める方法。

setTimeZone('EST') とかできそうだけど、わざわざDateTimeZoneオブジェクトを生成しないといけない。

//日本の現在の時刻とアメリカ東海岸の現地時刻の比較
$dt = new DateTime('now');
echo $dt->format('r'); //日本の時間(デフォルトはAsiz/Tokyoにしてあるので)
echo "<hr />\n";
$dt->setTimeZone(new DateTimeZone('America/New_York'));
echo $dt->format('r'); //アメリカ東海岸の時間

//向こうの現地時刻から日本の時刻に変換する場合
$dt = new DateTime('2008-12-09 23:22:44', new DateTimeZone('America/New_York'));
$dt->setTimeZone(new DateTimeZone('Asia/Tokyo'));
echo $dt->format('r');
このあたりのマニュアル、分かり辛い。

また、夏時間も自動で考慮してくれるようだ。
for ($i = 1; $i < 13; $i++) {
 $dt = new DateTime("2008-$i-11 0:00");
 echo '[日本] ' . $dt->format('Y-m-d H:i:s');

 $dt->setTimezone(new DateTimeZone('America/New_York'));
 echo ' [EST] ' . $dt->format('Y-m-d H:i:s');

 echo ' [offset] ' . ($dt->getOffset() / 60 / 60) . '時間<br />';
}
(結果)アメリカのサマータイムって3月から10月なんだ。
[日本] 2008-01-11 00:00:00 [EST] 2008-01-10 10:00:00 [offset] -5時間
[日本] 2008-02-11 00:00:00 [EST] 2008-02-10 10:00:00 [offset] -5時間
[日本] 2008-03-11 00:00:00 [EST] 2008-03-10 11:00:00 [offset] -4時間
[日本] 2008-04-11 00:00:00 [EST] 2008-04-10 11:00:00 [offset] -4時間
[日本] 2008-05-11 00:00:00 [EST] 2008-05-10 11:00:00 [offset] -4時間
[日本] 2008-06-11 00:00:00 [EST] 2008-06-10 11:00:00 [offset] -4時間
[日本] 2008-07-11 00:00:00 [EST] 2008-07-10 11:00:00 [offset] -4時間
[日本] 2008-08-11 00:00:00 [EST] 2008-08-10 11:00:00 [offset] -4時間
[日本] 2008-09-11 00:00:00 [EST] 2008-09-10 11:00:00 [offset] -4時間
[日本] 2008-10-11 00:00:00 [EST] 2008-10-10 11:00:00 [offset] -4時間
[日本] 2008-11-11 00:00:00 [EST] 2008-11-10 10:00:00 [offset] -5時間
[日本] 2008-12-11 00:00:00 [EST] 2008-12-10 10:00:00 [offset] -5時間


タイムゾーンは"EST"とかの方が分かりやすいが、
ここに挙げられているタイムゾーン (UTC 以外のもの) は使用しないでください。 これらは過去のバージョンとの互換性のためにのみ残されています。
とあるのでやめましょう。


参考:
 PHP: timezone_open - Manual
 PHP: date_timezone_set - Manual

ブログ アーカイブ

tags