crusader
crusader

Reputation: 11

Perl code to change the date format from IST/UTC to YYYY-MM-DD format

Input:

$str="Thu Mar 25 01:48:45 IST 2011";  

Desired output:

2011-03-25

I want only date, not the time.

Upvotes: 0

Views: 1104

Answers (3)

JRFerguson
JRFerguson

Reputation: 7516

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $tstamp = Time::Piece->strptime
    ("Thu Mar 25 01:48:45 2011", "%a %b %d %H:%M:%S %Y");
print $tstamp->strftime("%Y-%m-%d\n");

Upvotes: 4

David W.
David W.

Reputation: 107040

Heck, if you know the format of the date, you don't even need to use a Perl module to manipulate the date and time:

my %months = (Jan => 1, Feb => 2, Mar => 3, Apr => 4 ...);
my $st r= "Thu Mar 25 01:48:45 IST 2011";
$st =~! /\S+\s+(\S+)\s+(\S+)\s+\S+\s+\S+(\S+)/;
my $date = sprintf "%s-%02s-%02s", $3, $months{$1}, $2;

Okay, this is very error prone, and you probably want to do a lot of error checking. The regular expression I used could be formatted a bit stronger (checking for characters and numbers instead of just "not white space". And, you probably want to make sure the month is valid too.

Actually, you're better off using a Date/Time module to do this. I was going to recommend Time::Piece, but James_R_Ferguson beat me to it.

Upvotes: 0

choroba
choroba

Reputation: 241898

use Date::Manip;
$str =~ s/[[:upper:]]{3}//;  # Remove timezone
$d = ParseDate($str);
die "Invalid date\n" unless $d;
$d=~s/(....)(..)(..).*/$1-$2-$3/;
print "$d\n";

Upvotes: 0

Related Questions