2017-09-26 3 views
-2

POSIX 모듈을 사용하여 Perl에서 주어진 타임 스탬프를 GMT로 변환 할 수 있습니까? 다음은 서버의POSIX로 타임 스탬프를 GMT로 변환

use POSIX; 
my $shipts = "2017-09-23 20:53:00"; 
my $shiptsgmt = strftime("%Y-%m-%d %R", localtime(str2time($shipts, 'GMT'))); 
print "$shiptsgmt\n"; 

의 현지는 내가 할 노력하고있어하는 것은 정확하지 않은 추측, 태평양 시간이다 ... 내가하려고했으나 시간이 너무 멀리 떨어져 왜하지 않도록 한 것입니다. 위의 내용은 2017-09-23 13:53이며 2017-09-24 03:53 시간이 필요합니다.

+0

'str2time'이란 무엇입니까? – toolic

+0

POSIX는 str2time을 허용합니다. – rwfitzy

+0

POSIX 문서 (v5.16 및 v5.27)에서 볼 수 없습니다 ... – zdim

답변

3

POSIX만으로는 내장 기능과 약간의 처리가 도움이되지 않고이 작업을 수행 할 수 없습니다.

대안 : Time::Piece 핵심이며, 객체를 returing, 내 경험에 더 빨리는 POSIX

perl -MTime::Piece -wE' 
    $d = "2017-09-23 20:53:00"; 
    $t = localtime->strptime($d, "%Y-%m-%d %H:%M:%S"); 
    $t = gmtime($t->epoch); 
    say $t->strftime("%Y-%m-%d %H:%M:%S"); 
' 

보다이 객체를 만든 다음 gmtime에 대한 모듈의 (호환) 대체를 사용하여 GMT로 변환하는 또한 GMT로 적절히 표시됩니다.

strftime은 동일하지만, POSIX 확장보다 훨씬 가볍고 및 strptimefrom FreeBSD입니다. 이 모듈에는 datetime 객체의 여러 부분이나 표현을 문자열로 가져 오는 여러 가지 메서드와 몇 가지 다른 유틸리티가 있습니다. Time::Seconds을 참조하십시오.

DateTime은 모두 구문 분석 및 문자열 화를 위해 formatters을 통해이 모든 작업을 훌륭하게 처리합니다. 그러나 그것은 무겁다.


잘못이 모듈을 사용하게 오히려 쉽고, ikegami 그것을 고정하기 전에이 대답은 그냥했다   참고. 따라서 기본 이외의 다른 용도에는 매우 조심하십시오. 시간대를 변환 할 때 링크 된 답변 가능한 DST 관련 오류의 전체 계정에 대한

참고.

+0

@ikegami 감사합니다. 나는 지금 내가 발견 한 귀하의 게시물에 대한 정보와 함께 그 오류 (그리고 이것은 분명히 속임수 인 다른 오래된 게시물)를 직접 처리했습니다. 내가 찾으면 더 적합한 링크를 추가 할 것입니다. (경고문을 더 잘 보이게하기 위해 일부 의견을 삭제했습니다.) – zdim

+0

@ikegami 질문이 있으면 알려 드릴 수 있습니다.필자는 여기에 특정 용도로'Time :: Piece' (subclassing) 유틸리티를 작성했습니다 (매력적으로 작동합니다). 그러나 나는 이것으로 결코 조각을 찾을 수 없었습니다 : 가장자리 모듈, DST, 자정이없는 날, 또는 그런 모듈과 함께이 모듈에 결함이 있습니까? (까다 로움과 사용자 오류를 세지 않습니다.) 나는 지난 세기 정도의 세계적인 datetimes에 대해 상당히 기본적인 사용을 생각하고 있습니다. 나는 수색하고 찾았고 걱정할 것이 아무것도 발견하지 못했다. 그러나 이것은 까다로운 사업이다. 여기에 그런 질문을 할 수는 없지만 :( – zdim

+0

시간대에'localtime'을 사용합니다. T : P와 관련된 문제는 잘못 처리하는 것이 쉽다는 것입니다. API 디자인의 실패는 코드의 버그가 아니며 서브 클래 싱은 이러한 문제를 상속받을 수도 있습니다 캡슐화가 적용되지 않을 수도 있습니다 – ikegami

관련 문제