日付形式のデータをintergerに格納する方法を教えてください。

date型が扱えないデータベース(sqlite)があり、日付データの移行で困っています。どうやら、1199488339が2008/01/05らしいのですが、
どういう計算で値を出しているのかわかりません。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/01/17 01:37:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:so-asano No.1

回答回数40ベストアンサー獲得回数5

ポイント35pt

> どうやら、1199488339が2008/01/05らしいのですが、

> どういう計算で値を出しているのかわかりません。

上記の数字は、1970年1月1日00時00分00秒 GMT からの経過秒数だと思う(php の設定によって異なったりもするけど、ざっと計算してみた感じだと、多分そうだと思う)。

参考 url を見て、 date 関数で整形した日付を表示したり、mktime 関数で日時を作ったりするとよいかと。

http://php.plus-server.net/ref.datetime.html

id:bayan No.2

回答回数100ベストアンサー獲得回数13

ポイント35pt

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 は本格的に触ったことがないので、はずしていたらすみません。

  • id:kuruma_neko
    phpを知らないので、excelにてdatediffを使用し、1970/01/01からの秒数を取得するようにしました。ありがとうございました。
  • id:so-asano
    sqlite と聞いて、php 辺りを使ってるんじゃないか、と勝手に思ってしまった...。見当外れな回答になって申し訳ない(しかも、下の回答者に変な誤解を与えてしまったような気も)。
  • id:kuruma_neko
    エクセルでの障害管理をtracに移行しています。その際にtracで使用しているsqliteがdate型が扱えず、またintegerへの変換方法がわからずに困ってましたが、1970/01/01からの秒数だとわかれば十分な回答です。ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません