2012-05-01 1 views

답변

9

당신이 보여 ISO 8601 표기법의 가장 큰 장점은 그것이 문자열 비교와 비교 될 수 있다는 것입니다 :

my $v1 = "2011-12-14T17:22:52Z"; 
my $v2 = "2012-01-03T19:13:49Z"; 

print "$v1 earlier than $v2\n" if $v1 lt $v2; 

이 값이 모든 줄루 시간에 가정 (Z 일명, UTC 시간대입니다) . 다른 시간대가있는 경우 단일 표준 시간대로 표준화해야합니다 (UTC는 현명한 선택입니다).


주의해서 유의하십시오. 'string comparison'.

Perl에서 < 연산자는 두 개의 숫자를 비교합니다. 제시된 값은 훅, 도둑 또는 무력과 무지로 숫자로 강요됩니다. 예를 들어 if ("A" == "B")이 참이면 "A"이 숫자로 처리되므로 0이되고 "B"이됩니다. 날짜/시간 문자열은 숫자 비교를 사용하는 경우에만 숫자가 연도 구성 요소 인 것처럼 처리됩니다. (그 니모닉 원래 포트란 비교 연산자에 따라 될 수 있습니다 lt, le, gt, ge, eq, necmp)

문자열 비교 연산자는 문자열을 비교하는 데 사용됩니다. 숫자 비교를 위해 숫자 비교기 (<, <=, >, >=, !=, ==<=>)를 사용합니다. 당신이하고 싶은 비교 유형을 구분하도록주의하십시오.

+0

감사합니다. Jonathan Leffler !!! 그것은 일했다 .... – SWN

+0

Nit : "t"와 "T"가 모두 허용되고 둘 다 "z"와 "Z"가 허용되기 때문에 문자열을 비교하기 전에 문자열을 'uc'해야합니다. – ikegami

+0

참고 :이 특정 형식은 RFC 3339라고합니다. Atom은 대문자 "T"및 "Z"만 허용한다는 점을 제외하고는 Atom에서 사용됩니다 (다른 것들 중에서도). DateTime의 파서와 포맷터 : [DateTime :: Format :: RFC3339] (http://search.cpan.org/perldoc?DateTime::Format::RFC3339), [DateTime :: Format :: Atom] (http : /search.cpan.org/perldoc?DateTime::Format::Atom) – ikegami

2

날짜 인 경우 하지 반드시 동일한 시간대 (질문이 명시 적으로 언급하지 않았다)에, 다음 구문 분석 및 날짜 문자열을 직접 계산하는 것보다 전용 날짜 & 시간 모듈을 사용하여 더 나을 것입니다. 여기 DateTimeDateTime::Format::ISO8601 및 모듈을 사용하는 예이다 : 비교 캐릭터 기반의 않음 문자열 비교 달리 두 개체 사이의 수치 비교를 사용

use DateTime::Format::ISO8601; 

my $dt1 = DateTime::Format::ISO8601->parse_datetime('2011-12-14T17:22:52Z'); 
my $dt2 = DateTime::Format::ISO8601->parse_datetime('2011-12-14T17:22:52+01:00'); 

if ($dt1 < $dt2) { 
    print "$dt1 is first\n"; 
} else { 
    print "$dt2 is first\n"; 
} 

참고있다. DateTime이 비교 연산자와 문자열 보간 "연산자"를 오버로드했기 때문에이 방법이 효과적입니다.

+0

문제를 보는 한 가지 방법은 샘플 날짜 포함입니다 'Z' (줄루 시간 또는 UTC) 시간대 지정, 그리고 사람들이 technogeek가 아닌 한 일반적으로 사용하지 않기 때문에나는 때때로 그것을 사용한다), 날짜는 (아마도) 모두 같은 시간대에 있고 그 시간대는 UTC이다. 그럼에도 불구하고 표준 시간대가 다를 경우 간단한 문자열 비교가 적합하지 않습니다. 예를 들어'2015-01-01T04 : 30 : 00 + 12 : 00'은'2014-12-31T14 : 28 : 00-08 : 00'보다 빠릅니다 - 이전은'2014-12-31T20 : 30 : 00Z', 후자는'2014-12-31T22 : 28 : 00Z'입니다. 이것을 처리하기 위해 패키지를 사용하는 것이 현명합니다. –

관련 문제