0

簡単なファイル共有サービスを実装しています。現在、私はファイルベースのデータベースを使用しています (私のニーズに合っているため)。

   # somewhere in my cgi script
   sub first_run
    {
      my $dbh = DBI->connect('dbi:DBM:');
      $dbh = DBI->connect("dbi:DBM:", "", "",{ AutoCommit => 1, RaiseError => 1, f_dir=>$DATABASE_DIR} );
      unless ($dbh)
      {
        print "<br>Cannot connect: $DBI::errstr";
        return undef;
      }
      $dbh->do("CREATE TABLE uploads( user_name TEXT,
        file_name TEXT, 
        upload_date TEXT ) ");
      $dbh->disconnect( );
    }

ご覧のとおり、アップロードのタイムスタンプを文字列として保存することを提案しています。これは、現在は表示するだけでよいためです (localtime() を使用してタイムスタンプを人間が読める形式で取得するとします)。しかし、これは私にはやや悪いようです。後で、ある期間からのアップロードなどを表示したい場合はどうなりますか?

サードパーティの CPAN モジュールを使用せずにタイムスタンプを DBM データベースに保存する一般的な方法は何ですか? 後でそれらをプルしてユーザーに表示するにはどうすればよいですか (私の状況では、文字列に変換します)。

4

2 に答える 2

1

UTC時刻の保存は、現地時間の保存よりもあいまいさが少ないことを考慮してください。ロンドンのコンピューターで時間を節約し、香港でファイルを送ってくれた場合、プログラムにファイルをロードすると、実際に節約した時間が表示されますか?

UTC時刻を保存する際には、(少なくとも)2つの選択肢があることを考慮してください。フォーマットされた時刻文字列、または特定の時刻(「エポック」)以降の(秒/ミリ秒/その他)の数です。どちらの形式も、一方から他方への明確な双方向変換があるため、おそらくどちらの形式も他方と同形です。

于 2009-04-02T16:33:57.620 に答える
0

エポックを保存するだけで、*localtime* または *strftime* で簡単に表示できます。

エポックを元に戻すことなく DB のコンテンツを参照できるようにしたい場合は、数値と *localtime* 文字列 (" `1238693517 - Thu Apr 2 19:31:57 2009` の両方を格納できます。 」)。これにより、データが冗長化され、非正規化されますが、数値を処理しながら検査が容易になります。あなたの電話。

于 2009-04-02T17:34:37.053 に答える