2017-07-10 1 views
0

Je souhaite comparer la date et l'heure pour vérifier si l'horodatage du fichier que je vais ouvrir aura une date et une heure égales ou supérieures à celles de mon horodatage ceci:Comparer la date et l'heure et la même heure en perl

$Date = "20170608"; 
$Time = "105006"; 

Mon principal problème est de savoir comment le faire efficacement possible sans ajouter des bibliothèques de Perl et comment vérifier quand il y aura la situation de changement de date et l'heure sera par exemple 23:59:44

+0

est que le temps 01:05:06? – Sobrique

+0

Oui, mon erreur –

+1

* "sans ajouter de bibliothèques Perl" * Pourquoi vous limiter à seulement 5% de la puissance de Perl? – Borodin

Répondre

2

Time::Piece est le noyau de perl, et supporte 'strptime'.

#!/usr/bin/env perl 

use strict; 
use warnings; 
use Time::Piece; 

my $Date = "20170608"; 
my $Time = "10506"; 

my $ts = Time::Piece->strptime("$Date $Time", "%Y%m%d %H%M%S"); 
print $ts, "\n"; 

print "Delta:", $ts->epoch - time(), "\n"; 

était pas clair sur ce temps que $Time représenté - strptime convertit à 10:50:06, mais je devine que ce pourrait être destiné à être 01:05:06?

Si oui, alors zéro pad.

$Time = sprintf ("%06d", $Time); 

Pour lire l'horodatage à partir des métadonnées de fichier, vous devez stat:

my $mtime = (stat $filename)[9]; 
+0

Il est supposé être 10:50:06 Le problème est que je ne vais pas le comparer avec l'heure actuelle mais avec une date qui est enregistrée comme une variable. Et le problème est que le temps peut être mauvais - il sera tourné à 00:00:00 après 12 heures et ensuite je vais devoir vérifier la date en quelque sorte –

+0

Vérifier si un temps est aujourd'hui ou hier est probablement plus facile que vous ne le pensez - convertir il, en supposant que c'est aujourd'hui - alors regardez la taille du delta temporel. Si c'est> 1d, il y a de fortes chances que ce soit la mauvaise date. Je ne peux pas entrer dans plus de détails cependant, sans connaître votre comparaison de temps. – Sobrique

+0

$ DataStart = "20170608"; $ TimeStart = "235806"; $ DatetoCompare = "20170609"; $ TimetoCompare = "000106"; –