如何在DBM数据库中存储时间戳?

时间:2009-04-02 16:24:12

标签: perl timestamp dbm

我正在实施简单的文件共享服务。目前我使用基于文件的数据库(因为它符合我的需要)。

   # 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数据库中存储时间戳的常用方法是什么?我怎样才能在以后提取它们并将它们显示给用户(在我的情况下,转换回字符串)?

2 个答案:

答案 0 :(得分:1)

考虑存储UTC时间比存储本地时间更不明确。如果您在伦敦的计算机上节省时间并将文件发送给我,那么当我在程序中加载文件时,我会看到您实际保存的时间吗?

考虑到在存储UTC时间时你有(至少)两个选择:格式化的时间字符串,或者自特定时间(“时期”)以来的数字(秒/毫秒/无论)的数量。据推测,这两种格式与另一种格式是同构的,因为有一种定义明确的双向转换。

答案 1 :(得分:0)

我只会存储纪元,然后很容易用* localtime *或* strftime *显示它。

如果你真的希望能够浏览数据库的内容而不必转换回时代,你可以存储数值和* localtime *字符串(“`1238693517 - Thu Apr 2 19:31: 57 2009'“)。这使得数据冗余和非规范化,但也使得检查变得容易,同时仍然能够处理数值。你的电话。