Mon, July 14, 2008
JavaとPHPでの時間の取り扱い相互変換方法
先日Javaで構築したウェブアプリケーションをPHPに移植する仕事がありました。 データはMySQLで管理されていたため、 ロジックとユーザインタフェースだけをつくり直す作業で、問題は少なかった のですが、時間の取り扱いはちょっと悩みました。
しかし、結論としては簡単な方法で相互変換できることがわかったので、 メモしておきます。
エポック(epoch time)として取り扱う
Javaで構築したアプリでは、時間情報をデータベースのフィールドに格納する際に、 {u:java.util.Calendar のgetTimeInMillis() メソッド} から得られる値を使っていました。
これは、いわゆるエポックタイムといわれるもので、 1970年1月1日から現在までの時間を{u:ミリ秒}でカウントしたもの。
一方PHPには、{u:time()} という組み込みの関数があり、こちらは、 1970年1月1日から現在までの時間を{u:秒}でカウントしたものです。
以上から、 以下の関係が成り立ちます。
- java.util.Calendar.getInstance()getTimeInMillis()/1000 = time()
※1000ミリ秒が1秒に該当。
もともとがJavaで構築されていたので、 epoch timeはJavaにあわせることにしました。 したがって、 データベースから取り出すときは、1000で割ってから使いPHPで使用し、 データベースに格納するときは、1000をかけた数値を使用する、という方法で実装しました。