6
votes

Réorganisation d'un horodatage avec une plus grande réégalité de Perl

J'aimerais réorganiser un horodatage avec une plus grande réégalité de Perl avec le moindre code possible. Le format original de l'horodatage est le suivant:

#my $ts = '2011/12/29 20:19:45'; #input to a subroutine

$ts =~ s/^(\d{4})\///;
my $year = $1;
$ts =~ s/ /\/$year /;


1 commentaires

+1 sur le commentaire de George. S'il vous plaît ne pas descendre-mod sans explication. Ce n'est pas utile pour quiconque.


3 Réponses :


5
votes

Voici, vous allez:

$ts =~ s|^(\d+)/(\d+)/(\d+)(.+)$|$2/$3/$1$4|;


6 commentaires

Merci pour votre réponse étendue, y compris l'explication et l'amélioration de mes "cure-dents penchés"


À tout moment. BTW, vous pouvez rendre la regex encore plus courte en combinant jour et mois ensemble: s | ^ (\ d +) / (\ d + / \ d +) (. +) $ | $ 2 / $ $ 3 3 $ | :)


Bonne réponse. La question et la réponse me sont utiles, dûment modulées.


J'ai tendance à ne pas combiner jour / mois ensemble, si seulement parce qu'il ya beaucoup de formats de date différents. Garder les champs groupés est plus judicieux si vous avez déjà l'intention d'utiliser le code dans quelque chose de similaire à nouveau.


Il n'est pas nécessaire de capturer le reste de la chaîne. Si vous ne le spécifiez pas pour changer, ce n'est pas le cas. Plus court est un s | (\ d {4}) / (\ d +) / (\ d +) | 2 $ / 3 $ / $ 1 $ |;


Bon point: "Pas besoin de capturer le reste de la chaîne" ... Je ne le faisais pas en premier lieu. Merci à tous!



1
votes

Utilisation des références du dos Vous pouvez obtenir la mise en forme souhaitée -

[jaypal:~/Temp] echo "2011/12/29 20:19:45" | 
perl -pe 's@([0-9]{4})/([0-9]{2})/([0-9]{2})@$3/$1/$2@'
29/2011/12 20:19:45


2 commentaires

\ 3 etc mieux écrit comme 3 $ .


VRAI ... je ne sais pas vraiment perl juste utilisé son sed capacités. Mettra à jour la réponse car elle semble mieux et merci pour les commentaires. :)



0
votes

Pour plus de manipulation d'horodatage générique, vous voulez éventuellement aller aller-retour via STRATTIME / StrfTime . Dans ce cas, il s'agit simplement de réorganiser sur le terrain, mais pour des cas plus complexes tels que les numéros de mois de tournage en noms, StrfTime sera requis. XXX


0 commentaires