开发者

Splitting YYYYMMDD date into 3 parts in Perl

开发者 https://www.devze.com 2023-01-05 19:07 出处:网络
How do I split a date that is of the form YYYYMM开发者_StackOverflow社区DD into its constituents?

How do I split a date that is of the form YYYYMM开发者_StackOverflow社区DD into its constituents?

my ($yyyy, $mm, $dd) = $date =~ /(\4d+)(\2d+)(\2d+)/;


my ($year, $month, $day) = unpack "A4A2A2", $date;

pack and unpack are underused builtins that can be used to great power.


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

notice this will look for the first date in the regex, it won't work with 2010063011 because it's not a date, but it will work with 20100630, which is what you want.


my ($year, $month, $day) = $date =~ /^(\d{4})(\d{2})(\d{2})\z/a
    or die "bad date: $date";


Whenever I need to work with dates I use the DateTime module. You can grab it from CPAN.


Note that \d matches any Unicode digits, not just latin decimal digits.

So if you want to do input validation use '[0-9]' instead of '\d'.

0

精彩评论

暂无评论...
验证码 换一张
取 消