Perl代码,用于将日期格式从IST / UTC更改为YYYY-MM-DD格式

时间:2011-11-08 11:22:00

标签: perl date

输入:

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

期望的输出:

2011-03-25

我只想要约会,而不是时间。

3 个答案:

答案 0 :(得分:4)

#!/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");

答案 1 :(得分:0)

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";

答案 2 :(得分:0)

哎呀,如果你知道日期的格式,你甚至不需要使用Perl模块来操纵日期和时间:

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;

好的,这很容易出错,你可能想做很多错误检查。我使用的正则表达式可以格式化得更强一些(检查字符和数字而不仅仅是“非空格”。而且,您可能希望确保月份也有效。

实际上,最好使用日期/时间模块来执行此操作。我打算推荐Time :: Piece,但是James_R_Ferguson打败了我。