andrewarnier
andrewarnier

Reputation: 177

How to get the system clock in format in Perl?

I want to get the system clock (time and date) and display it in a human-readable format in Perl. The format like 2014-09-12 15:13:56

#!/usr/local/bin/perl
my %months = qw(Jan Feb Mar Apr May  Jun  Jul
Aug  Sep  Oct  Nov Dec);
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear,   
$daylightSavings) = localtime();
$year = 1900 + $yearOffset;
$now = "$year-$months-$dayOfMonth $hour:$minute:$second";
print $now;

When you run the program, you should see a much more readable date and time like this:

2014--12 16:57:15

how to get convert the month to number ?

Upvotes: 3

Views: 558

Answers (3)

Andrew
Andrew

Reputation: 41

I like to put these date and time tasks into functions for reuse. Here is my approach:

use strict;
use warnings;

my $time_stamp = getTodaysDateTime();
print "Program Started: $time_stamp \n";

# do some processing 

$time_stamp = getTodaysDateTime();
print "Program Ended: $time_stamp \n";


# return date in specific format 
# ex: 2014-09-12 14:11:43
sub getTodaysDateTime {
    my ($sec,$min,$hour,$mday,$mon,$year,
        $wday,$yday,$isdst) = localtime(time);
    $year += 1900;
    $mon += 1;
    return sprintf("%d-%02d-%02d %02d:%02d:%02d",
        $year,$mon,$mday,$hour,$min,$sec);
}

Upvotes: 0

mpapec
mpapec

Reputation: 50637

Using Time::Piece (core module since perl v5.9.5)

use Time::Piece;
my $dt = localtime;
print $dt->ymd, " ", $dt->hms, "\n";

using DateTime

use DateTime;
my $dt = DateTime->now();
print $dt->ymd, " ", $dt->hms, "\n";

Upvotes: 6

Miguel Prz
Miguel Prz

Reputation: 13792

It's easier using a Perl module (POSIX doesn't requires installation):

use POSIX qw/strftime/;
my $now_string = strftime "%Y-%m-%d %H:%M:%S", localtime;
print $now_string, "\n"; #<-- prints: 2014-09-12 11:09:45 (with my local time)

Regarding to your code, there is a typo:

$now = "$year-$months-$dayOfMonth $hour:$minute:$second";

should be:

$now = "$year-$month-$dayOfMonth $hour:$minute:$second";

Be sure to write use strict; and use warnings; in the top place of your script. It prevents you from errors like that.

Upvotes: 4

Related Questions