如何将YYYYMMDD形式的日期拆分为其成分?
my ($yyyy, $mm, $dd) = $date =~ /(\4d+)(\2d+)(\2d+)/;
答案 0 :(得分:14)
my ($year, $month, $day) = unpack "A4A2A2", $date;
pack
和unpack
是未充分利用的内置版本,可用于强大的力量。
答案 1 :(得分:4)
my ($year, $month, $day) = $date =~ /^(\d{4})(\d{2})(\d{2})\z/a
or die "bad date: $date";
答案 2 :(得分:4)
#!/usr/bin/perl -w
use strict;
sub main{
my $date = "some text with the numbers 2010063011 and more text";
print "Input Date: $date\n";
my ($year, $month, $day) = $date =~ /\b(\d{4})(\d{2})(\d{2})\b/;
print qq{
Date: $date
Year: $year
Month: $month
Day: $day\n} if (defined $year && defined $month && defined $day);
}
main();
请注意,这将在正则表达式中查找第一个日期,但它不适用于2010063011
,因为它不是日期,但它可以与20100630
一起使用,这就是您想要的。< / p>
答案 3 :(得分:0)
每当我需要使用日期时,我都会使用DateTime模块。你可以从CPAN中获取它。
答案 4 :(得分:-1)
请注意\ d匹配任何Unicode数字,而不仅仅是拉丁十进制数字。
因此,如果您想进行输入验证,请使用'[0-9]'而不是'\ d'。