준호씨의 블로그

perl - yyyy-mm-dd hh:mm:ss 만들기. yyyymmddhhmmss 본문

개발이야기

perl - yyyy-mm-dd hh:mm:ss 만들기. yyyymmddhhmmss

준호씨 2017. 10. 2. 11:32
반응형

yyyy-mm-dd hh:mm:ss

Time::Piece 로 localtime 에 strftime 함수 추가해서 사용하기

use Time::Piece;

print localtime->strftime('%F %T');

Time::Piece 모듈을 사용하게 되면 localtime 에 strftime 함수가 오버라이드 된다. Time::Piece 모듈은 Perl 5.10 부터 기본 모듈로 들어가 있다. 만약 없다면 cpan 으로 설치 해 주면 된다.

cpan Time::Piece

Time::Piece 관련 릴리즈노트

5.8 에서 Time::Piece (이전에는 Time::Object) 가 제거 됨 https://perldoc.perl.org/perl58delta.html

5.10 에 Time::Piece 가 다시 추가 됨 https://perldoc.perl.org/perl5100delta.html

POSIX strftime 이용

use POSIX;

print strftime "%F %T", localtime

간단하다 POSIX 의 strftime 함수로 localtime 의 포멧을 변경하면 된다.

shell 커맨드 한줄로 출력하기

$ perl -MPOSIX -le 'print strftime "%F %T", localtime'
2017-10-02 10:37:13

만약 프로그램이 시작 했을 때의 시간을 출력 하려면 다음과 같이 한다. localtime 뒤에 $^T 를 추가 했다.

$ perl -MPOSIX -le 'print strftime "%F %T", localtime $^T'
2017-10-02 10:35:56

차이를 알아 보려면 다음과 같이 테스트 해 볼 수 있다. 첫번째 예제는 $^T 를 안넣어서 5초 뒤에 5초 뒤의 시간이 나왔고, 두번째 예제에서는 $^T 를 넣어서 시작할때 찍었던 시간과 종료 할 때 찍은 시간이 동일함을 볼 수 있다.

$ date +'%F %T';perl -MPOSIX -le 'sleep 5;print strftime "%F %T", localtime'
2017-10-02 10:40:18
2017-10-02 10:40:23
$ date +'%F %T';perl -MPOSIX -le 'sleep 5;print strftime "%F %T", localtime $^T'
2017-10-02 10:41:31
2017-10-02 10:41:31

참고로 그냥 $^T 를 찍어 보면 다음과 같다.

$ perl -e 'print $^T'
1506908639

해당 값은 epoch 이다. (seconds since 1970-01-01 00:00:00 UTC)

$ date +%s
1506908707
$ date --help
...
  %s   seconds since 1970-01-01 00:00:00 UTC

yyyymmddhhmmss

sub get_current {
    my $epoc = time();
    my $datestring = strftime "%Y%m%d%H%M%S", localtime($epoc);
    return $datestring;
}

참고

Quickly getting to YYYY-mm-dd HH:MM:SS in Perl https://stackoverflow.com/questions/1814196/quickly-getting-to-yyyy-mm-dd-hhmmss-in-perl

localtime https://perldoc.perl.org/functions/localtime.html

Time::Piece http://perldoc.perl.org/Time/Piece.html

반응형
Comments