2012-08-24 2 views
2

this answer에서 저는 DateTime::Format::Strptime을 사용하여 문자열에서 날짜를 가져 왔습니다.DateTime :: Format :: Strptime을 사용하여 문자열을 날짜로 변환합니다.

다음 패턴을 사용하고 있습니다 : %m%d%Y%n%T. 이 should be matching :

  • %m : 월 번호 (01-12)입니다. 이렇게하면 한 자리 숫자도 구문 분석됩니다.
  • %d : 일 (01-31). 이렇게하면 한 자리 숫자도 구문 분석됩니다.
  • %Y : 세기를 포함하는 연도 (예 : 1991).
  • %n : 임의 공백.
  • %T
  • : 등가 %H:%M:%S 행 :
    • %H 다음 시간 (00-23). 이렇게하면 한 자리 숫자도 구문 분석됩니다.
    • %M : 분 (00-59). 이렇게하면 한 자리 숫자도 구문 분석됩니다.
    • %S : 초 (0-60; 60은 윤초에 발생할 수 있습니다 (DateTime::LeapSecond 참조).

그러나, 입력에 : [05/18/2011 14:14:05]이 오류와 함께 실패하는 것 :

Your datetime does not match your pattern

는 최대한 멀리 볼 수있는, 내 패턴은 입력 패턴과 일치합니다. 내가 어디로 잘못 가고 있니?

관련 코드는 다음과 같습니다 :


use DateTime::Format::Strptime qw(); 

my $format = DateTime::Format::Strptime->new(
    pattern => '%m%d%Y%n%T', 
    time_zone => 'local', 
    on_error => 'croak', 
); 

my $dt = $fields->[1] ; 
print "Date:[$dt]\n"; 
my $dateopen = $format->parse_datetime($dt); 

출력 :

Date:[05/18/2011 14:14:05]
Your datetime does not match your pattern

답변

5

비 패턴 문자뿐만 아니라 중요하다. 날짜 구성 요소 사이에 슬래시가 있으므로 '%m/%d/%Y%n%T' 패턴은 작동하지 않습니다.

패턴 %D%m%d%Y의 바로 가기이고 슬래시도 포함되어 있지 않으므로 작동하지 않습니다.

관련 문제