web-dev-qa-db-fra.com

Comment formater un horodatage en Perl?

Je voudrais obtenir cette mise en forme de timestamps:

01/13/2010 20:42:03 - -

Où il y a toujours 2 chiffres pour le numéro sauf pour l'année, où c'est 4 chiffres. Et c'est basé sur une horloge de 24 heures.

Comment puis-je faire cela en Perl? Je préfère les fonctions natives.

15
Brian

POSIX fournit strftime :

 $ Perl -MPOSIX -nous 'affichons POSIX :: strftime ("% m /% d /% Y% H:% M:% S\n", heure locale)' 
 01/27/2010 14:02:34 

Vous pourriez être tenté d'écrire quelque chose comme:

my ($sec, $min, $hr, $day, $mon, $year) = localtime;
printf("%02d/%02d/%04d %02d:%02d:%02d\n", 
       $day, $mon + 1, 1900 + $year, $hr, $min, $sec);

comme moyen d'éviter _ POSIX . Non! Autant que je sache, POSIX.pm fait partie du noyau depuis 1996 ou 1997.

36
Sinan Ünür

Essayez les Date :: Format sous-routines de formatage de CPAN.

1
Diego Dias

Ceci est un sous-programme que j'utilise. Il vous permet d’obtenir l’horodatage de la date dans le format de votre choix.

#! /usr/bin/Perl
use strict;
use warnings;

use POSIX;
use POSIX qw(strftime);

sub getTime 
{
    my $format = $_[0] || '%Y%m%d %I:%M:%S %p'; #default format: 20160801 10:48:03 AM
    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time);
    return strftime($format, $sec, $min, $hour, $wday, $mon, $year, $mday);
}

# Usage examples
print getTime()."\n";                    #20160801 10:48:03 AM
print getTime('%I:%M:%S %p')."\n";       #10:48:03 AM
print getTime('%A, %B %d, %Y')."\n";     #Monday, August 01, 2016
print getTime('%Y%m%d %H:%M:%S')."\n";   #20160801 10:48:03
0
sdc