想要转换例如日期:
02082012
In that case:
02 - Day
08 - Month
2012 - Year
现在我将日期分开,但无法转换为月份:
#echo "02082012"|gawk -F "" '{print $1$2 "-" $3$4 "-" $5$6$7$8}'
#02-08-2012
转换后的预期视图并捕获所有月份:
02-Aug-2012
答案 0 :(得分:3)
直接的:
kent$ date -d "$(echo '02082012'|sed -r 's/(..)(..)(....)/\3-\2-\1/')" "+%d-%b-%Y"
02-Aug-2012
答案 1 :(得分:3)
使用POSIX模块的另一个Perl sollution,它位于Perl核心中。
use POSIX 'strftime';
my $date = '02082012';
print strftime( '%d-%b-%Y', 0, 0, 0,
substr( $date, 0, 2 ),
substr( $date, 2, 2 ) - 1,
substr( $date, 4, 4 ) - 1900 );
请查看http://strftime.net/,了解strftime
占位符的完整概述。
答案 2 :(得分:2)
使用Perl的POSIX模块和strftime
看起来像
#! /usr/bin/env perl
use strict;
use warnings;
use POSIX qw/ strftime /;
while (<>) {
chomp;
if (my($d,$m,$y) = /^(\d\d)(\d\d)(\d\d\d\d)$/) {
print strftime("%d-%b-%Y", 0, 0, 0, $d, $m-1, $y-1900), "\n";
}
}
输出:
$ echo 02082012 | convert-date 02-Aug-2012
答案 3 :(得分:2)
Time::Piece是一个核心Perl模块,非常适合这样的简单操作。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $string = '02082012';
my $date = Time::Piece->strptime($string, '%d%m%Y');
say $date->strftime('%d-%b-%Y');
(是的,这与用户1811486的答案非常相似 - 但它使用的是原始问题中所要求的正确格式。)
答案 4 :(得分:1)
我想是这样的......
use 5.10;
use strict;
use warnings;
use Time::Piece;
my $date = '2013-04-07';
my $t = Time::Piece->strptime($date, '%Y-%m-%d');
print $t->month;
print $t->strftime('%Y-%b-%d');
我试过这个......
答案 5 :(得分:1)
要拆分具有固定字段长度的字符串,请使用unpack
:
my $input = "02082012";
my ( $day, $month, $year ) = unpack( 'a2 a2 a4', $input );
print "$input becomes $day, $month, $year\n";
请参阅http://perldoc.perl.org/functions/unpack.html
然后,如其他答案中所述,使用POSIX::strftime()
重新格式化日期。