Perl-код для изменения формата даты с IST / UTC на формат YYYY-MM-DD - PullRequest
0 голосов
/ 08 ноября 2011

Введите:

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

Желаемый вывод:

2011-03-25

Я хочу только дату, а не время.

Ответы [ 3 ]

4 голосов
/ 08 ноября 2011
#!/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");
0 голосов
/ 08 ноября 2011

Черт, если вы знаете формат даты, вам даже не нужно использовать модуль 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;

Хорошо, это очень подвержено ошибкам, иВы, вероятно, хотите сделать много ошибок.Регулярное выражение, которое я использовал, можно отформатировать немного сильнее (проверяя символы и цифры, а не просто «не пробел». И, возможно, вы хотите убедиться, что месяц также действителен.

На самом деле, вы 'Для этого лучше использовать модуль Date / Time. Я собирался порекомендовать Time :: Piece, но James_R_Ferguson опередил меня.

0 голосов
/ 08 ноября 2011
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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...