problème d'affichage du format de la date (AAAA-MM-JJ)

problème d'affichage du format de la date (AAAA-MM-JJ) - Perl - Programmation

Marsh Posté le 17-04-2008 à 12:09:42    

salut tout le monde et merci de vous attardez sur mon cas.
 
j'ai un petit soucis avec mon mini code.
Dans mon premier cas:
sub time2str ($) {
    my $time = shift;
    my @t = (localtime $time)[0..5];
    return sprintf '%d-%d-%d', $t[5]+1900, $t[4]+1,$t[3]-1;
}
 
$date = time2str( time );
$date =~ s/-(\d)-/-0$1-/;

 
la date s'affichera comme ceci lorsque les jours seront inférieurs à 10:
"2008-04-9"
 
Dans mon autre cas:
sub time2str ($) {
    my $time = shift;
    my @t = (localtime $time)[0..5];
    return sprintf '%d-%d-%d', $t[5]+1900, $t[4]+1,$t[3]-1;
}
 
$date = time2str( time );
$date =~ s/-(\d)-(\d)/-0$1-0$2/;

 
la date s'affichera comme ceci lorsque les jours seront isupérieurs à 10:
"2008-04-016"
 
ce que je cherche a obtenir est une date du type: 2008-04-06 et 2008-11-30
 
le problème est que je dois passer à coté d'un truc mais je ne vois pas quoi.
merci de m'aider à résoudre mon problème.


Message édité par warzoo le 17-04-2008 à 12:10:47
Reply

Marsh Posté le 17-04-2008 à 12:09:42   

Reply

Marsh Posté le 17-04-2008 à 12:11:50    

Utilise la première solution, avec ce pattern de sprintf : '%04d-%02d-%02d'
 
Explication : %04d signifie : "entier de longueur fixe de 4 caractères, et un padding qui se fait avec des '0' pour compléter les vides".

Reply

Marsh Posté le 17-04-2008 à 14:01:16    

merci pour la réponse, encore une fois, j'ai eu le droit à une réponse express avec qui plus est la bonne réponse lol.
 
à la poche pleine

Reply

Marsh Posté le 17-04-2008 à 14:19:11    

Bref, au final, un truc plus ou moins comme ceci

Code :
  1. sub time2str ($) {
  2.     my @pad = (1900, 1, -1);
  3.     return sprintf "%04d-%02d-%02d", map {$_ + shift @pad} (localtime $_[0])[5,4,3];
  4. }


 
Si quelqu'un a une methode pour additionner deux arrays d'entiers avec un ou plusieurs maps, je suis preneur, pour faire un one-liner ;)
En Perl 6, il y a le bon operateur: >>+<<  
return sprintf "%04d-%02d-%02d", (1900, 1, -1) >>+<< (localtime $_[0])[5,4,3];
 
A+,


Message édité par gilou le 18-04-2008 à 09:44:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 17-04-2008 à 14:26:45    

c'est bien un truc de perfectionniste lol
c'est cool, vous assurez.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed