La date numérique retournée peut peut-être être utilisée (moyennant éventuellement une conversion numérique simple) vers une valeur numérique utilisable par localtime et strftime (module POSIX dans le Core de perl depuis la version 5).
La fonction localtime a pour date de base Epoch (0 seconde est équivalent au 1er janvier 1970).
Reste à connaitre la base pour la date Excel. Si j'en crois cet article, la date de référence serait le 1er janvier 1900, et la valeur vaudrait alors 1 (en jour).
Reste à calculer le nombre de secondes entre ces deux dates de référence. On constate que ce calcul, en valeur entière, dépasse la capacité des entiers, et n'est pas possible :
perl -MPOSIX=mktime -E 'print mktime(0,0,0,1, 0, 70) - mktime(0,0,0,1,0,0)'
On peut donc calcul le nombre de jour avec ce module Date::Calc :
1 2
| $ perl -MDate::Calc=Delta_Days -E 'say Delta_Days(1900, 1, 1, 1970, 1, 1);'
25567 |
On peut donc convertir une date Excel en date compatible localtime ainsi :
$date_localtime = ($date_excel - 25567) * 86400
En utilisant locatime et POSIX::strftime, tu pourras reconstituer une date du style "10/01/2012" :
1 2
| use POSIX qw(strftime);
print strftime("%D", localtime($date_localtime)); |
Partager