gilou Modérateur Modzilla | En perl, on pourrait faire ainsi:
Code :
#!/usr/bin/perl use strict; use warnings; use autodie; use Time::Local; sub UTC2local { # conversion en nombre de secondes depuis 'the epoch', le zero de référence unix/linux avec timegm # puis reconversion en temps local (en fonction de la timezone de la machine ou s'exécute le script) avec localtime my ($sec, $min, $hour, $day, $month, $year) = (localtime(timegm (@_)))[0.. 5]; $year += 1900; $month++; return (sprintf("%s=\"%04d-%02d-%02d %02d:%02d:%02d\"", $name, $year, $month, $day, $hour, $min, $sec)); } open my $fhin, "<", "utc.txt"; open my $fhout, ">", "ltc.txt"; while (<$fhin> ) { s/ (?<=\ s)(date|TS )= "(\d{4})\-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})"/UTC2local ($ 1, $ 7, $ 6, $ 5, $ 4, $ 3 - 1, $ 2)/ge; }
|
Il y a probablement moyen de ne pas passer le nom de l'attribut à UTC2local, si on veut optimiser.
EDIT: Une version un poil plus optimale:
Code :
#!/usr/bin/perl use strict; use warnings; use autodie; use Time::Local; sub UTC2local { # conversion en nombre de secondes depuis 'the epoch', le zero de référence unix/linux # puis reconversion en temps local (en fonction de la timezone de la machine ou s'exécute le script) # reverse en entrée et sortie parce que timegm et localtime sont dans l'ordre (sec, min, hour, day, month, year) $ltime[0] += 1900; # car localtime retourne le nb d'annes depuis 1900 $ltime[1]++; # pour repasser de mois variant de 0 a 11 a des mois variant de 1 a 12 } open my $fhin, "<", "utc.txt"; open my $fhout, ">", "ltc.txt"; while (<$fhin> ) { # $3 - 1 car les mois utilisés par localtime et timegm varient entre 0 et 11 s/ (?<=\ s)(TS|date )= "(\d{4})\-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})"/ "$1=\"".UTC2local ($ 2, $ 3 - 1, $ 4, $ 5, $ 6, $ 7). '"'/ge; }
|
A+, Message édité par gilou le 01-04-2015 à 00:46:07 ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|