Как я могу сохранить метку времени в базе данных DBM? - PullRequest
0 голосов
/ 02 апреля 2009

Я внедряю простой сервис обмена файлами. В настоящее время я использую файловую базу данных (так как она соответствует моим потребностям).

   # 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( );
    }

Как вы можете видеть, я предлагаю сохранить метку времени загрузки в виде строки, поскольку в настоящее время мне нужно только отображать ее (предположим, что для получения метки времени в удобочитаемом формате используется локальное время ()). Но это мне кажется несколько плохим. Что если позже я захочу показать загрузки за определенный период и т. Д.

Каков общий способ хранения временных меток в базе данных DBM без использования сторонних модулей CPAN? Как я могу вытащить их позже и показать их пользователю (в моем случае конвертировать обратно в строку)?

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

Учтите, что хранение времени UTC менее неоднозначно, чем хранение местного времени. Если вы сэкономите время на своем компьютере в Лондоне и отправите мне файл в Гонконге, смогу ли я, когда я загружу файл в вашу программу, увидеть время, которое вы действительно сохранили?

Учтите, что при хранении времени UTC у вас есть (как минимум) два варианта: отформатированная строка времени или количество чисел (секунд / миллисекунд / что угодно) с определенного времени («эпоха»). Предположительно, любой формат изоморфен другому, так как существует четкое двунаправленное преобразование из одного в другой.

0 голосов
/ 02 апреля 2009

Я бы просто сохранил эпоху, ее легко отобразить с помощью * localtime * или * strftime *.

Если вы действительно хотите иметь возможность просматривать содержимое БД без необходимости конвертировать эпоху, вы можете сохранить как числовое значение, так и строку * localtime * ("` 1238693517 - Четверг, 2 апреля 19:31: 57 2009` "). Это делает данные избыточными и денормализованными, но также облегчает их проверку, в то же время позволяя обрабатывать числовые значения. Ваш звонок.

...