2009-04-02 19 views
0

J'implémente un simple service de partage de fichiers. Actuellement, j'utilise une base de données basée sur des fichiers (selon mes besoins).Comment puis-je stocker un horodatage dans une base de données 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(); 
    } 

Comme vous pouvez le voir, je propose de stocker l'horodatage de téléchargement sous forme de chaîne, puisque actuellement je ne l'afficher (supposons utiliser localtime() pour obtenir l'horodatage dans un format lisible par l'homme). Mais cela me semble un peu mauvais. Que se passe-t-il si plus tard, je veux afficher les téléversements d'une certaine période, etc.

Quelle est la manière courante de stocker des horodatages dans une base de données DBM sans utiliser de modules CPAN tiers? Comment puis-je les tirer plus tard et les montrer à l'utilisateur (dans ma situation, convertir en chaîne)?

Répondre

1

Considérer que le stockage de l'heure UTC est moins ambigu que le stockage de l'heure locale. Si vous économisez du temps sur votre ordinateur à Londres et que vous m'envoyez le fichier à Hong Kong, est-ce que je pourrai, lorsque je chargerai le fichier dans votre programme, voir l'heure que vous avez réellement enregistrée? Considérons qu'en stockant l'heure UTC, vous avez (au moins) deux choix: la chaîne de temps formatée, ou un nombre de chiffres (secondes/millisecondes/peu importe) depuis un certain moment ("l'époque"). On peut supposer que l'un ou l'autre format est isomorphe avec l'autre, car il y a une conversion bidirectionnelle bien définie de l'un à l'autre.

+0

Merci. Je vais le prendre en compte. – jonny

0

Je voudrais juste stocker l'époque, il est facile de l'afficher ensuite avec * localtime * ou * strftime *.

Si vous voulez vraiment pouvoir parcourir le contenu de la base de données sans avoir à reconvertir l'époque, vous pouvez stocker à la fois la valeur numérique et la chaîne * localtime * ("` 1238693517 - jeu. 2 avr 19:31 : 57 2009` "). Cela rend les données redondantes et dénormalisées, mais facilite également l'inspection, tout en étant capable de traiter la valeur numérique. Ton appel.