date型が扱えないデータベース(sqlite)があり、日付データの移行で困っています。どうやら、1199488339が2008/01/05らしいのですが、
どういう計算で値を出しているのかわかりません。
> どうやら、1199488339が2008/01/05らしいのですが、
> どういう計算で値を出しているのかわかりません。
上記の数字は、1970年1月1日00時00分00秒 GMT からの経過秒数だと思う(php の設定によって異なったりもするけど、ざっと計算してみた感じだと、多分そうだと思う)。
参考 url を見て、 date 関数で整形した日付を表示したり、mktime 関数で日時を作ったりするとよいかと。
1199488339 はUNIXタイムスタンプ(※)と思われます。
※「Unix epoch(1970年1月1日 00:00:00 GMT))からの通算秒」
sqlite とのことで、ひょっとしてプログラム言語にPHPをお使いでしょうか?
であれば日付・時刻関数で相互変換ができると思います。
<?php // タイムスタンプから YYYY/MM/DD hh:mm:ss 書式化にする // http://www.php.net/manual/ja/function.date.php echo date("Y/m/d H:i:s",1199488339); ?>
2008/01/05 08:12:19
<?php // 日付の文字列からタイムスタンプにする // http://www.php.net/manual/ja/function.strtotime.php echo strtotime("2008/01/05 08:12:19")."\n"; echo strtotime("2008-01-06 00:00:00")."\n"; ?>
1199488339 1199545200
<?php // 時分秒月日年...を引数で指定してタイムスタンプを得る // http://www.php.net/manual/ja/function.mktime.php // 2008/01/01 00:00:00 echo strtotime(0,0,0,1,1,2008)."\n"; ?>
1199113200
また日付形式のデータですが、 integer で格納するほかに、
'2008/01/05 08:12:19' のように文字列で格納してしまう
というのも手だと思います。
(要求やら仕様やらと照らし合わせて可能であればですが)
なお、タイプスタンプを32bit符号付き整数で扱う環境だと2038年以降の日付を扱う際に問題が生じると思うので、先々まで使うシステム or 未来の日付を扱うシステムでは、PEAR::Date 等の使用を検討された方がいいかもしれません。
http://codezine.jp/a/article/aid/1816.aspx
sqlite は本格的に触ったことがないので、はずしていたらすみません。
コメント(3件)