Разделение даты ГГГГММДД на 3 части в Perl - PullRequest
3 голосов
/ 03 июля 2010

Как разделить дату в формате ГГГГММДД на составляющие?

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

Ответы [ 5 ]

14 голосов
/ 03 июля 2010
my ($year, $month, $day) = unpack "A4A2A2", $date;

pack и unpack - недоиспользуемые встроенные функции, которые могут быть использованы для большой мощности.

4 голосов
/ 03 июля 2010
#!/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, что вам и нужно.*

4 голосов
/ 03 июля 2010
my ($year, $month, $day) = $date =~ /^(\d{4})(\d{2})(\d{2})\z/a
    or die "bad date: $date";
0 голосов
/ 05 июля 2010

Всякий раз, когда мне нужно работать с датами, я использую модуль DateTime.Вы можете получить его из CPAN.

0 голосов
/ 05 июля 2010

Обратите внимание, что \ d соответствует любым Unicode-цифрам, а не только латинским десятичным.

Поэтому, если вы хотите выполнить проверку ввода, используйте '[0-9]' вместо '\ d'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...