Perl에서 YYYY-mm-dd HH : MM : SS로 빠르게 이동
Perl 펼쳐지는 때 종종 YYYY-mm-dd HH:MM:SS
(예 :) 형식의 고급스러운 시간을 가져옵니다 2009-11-29 14:28:29
.
이렇게하면서 나는이 매우 성가신 길을 택했다.
man perlfunc
/localtime
현지 시간을 검색해야 할 경우- 맨 페이지의 관련 섹션으로 이동 다섯 번 (/
+\n
)을 반복 합니다.($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
맨 페이지 의 페이지를 내 펼쳐 복사합니다 .- 시도
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec);
- 기억하세요 # 1 : 올해를 얻으려면 1900 년에 더해야합니다.
- 시도
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon, $mday, $hour, $min, $sec);
- 기억하세요 # 2 : 이번 달을 더해야 $ mon에 1을해야합니다.
- 시도
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
- 괜찮아 보인다. 완료!
위에 설명 된 프로세스가 작동하는 동안 최적이 아닙니다. 더 똑똑한 방법이 확실하게 내 질문은 간단합니다.
YYYY-mm-dd HH:MM:SS
Perl에서 현재 날짜 / 시간 을 얻는 가장 쉬운 방법은 무엇입니까?
"쉬움"은 "작성하기 쉬움"과 "기억하기 쉬움"을 모두 포함합니다.
strftime
표준 모듈 에서 사용하십시오 . Perl의 바인딩에서 대한 인수 는 및 의 반환 값과 일치하도록 설계되었습니다 . 비교POSIX
strftime
localtime
gmtime
strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
와
my ($sec,$min,$hour,$mday,$mon,$year,$wday, $yday, $isdst) = gmtime(time);
명령 줄 사용의 예는 다음과 가변합니다.
$ perl -MPOSIX -le 'print strftime "%F %T", localtime $^T'
또는 소스 파일에서
use POSIX;
print strftime "%F %T", localtime time;
일부 시스템은 %F
및 %T
속기를 지원하지 않고 다음 과 같이 명시해야합니다.
print strftime "%Y-%m-%d %H:%M:%S", localtime time;
또는
print strftime "%Y-%m-%d %H:%M:%S", gmtime time;
time
호출 널 현재 시간 을 반환하는 반면 프로그램이 시작된 시간으로 고정됩니다. 를 사용 하면 반환 값은 GMT의 현재 시간입니다. 를 사용하여 현지 언어의 시간을 검색합니다 .$^T
gmtime
localtime
DateTime
모듈을 사용하여 더러운 작업을 수행하지 않는 것은 무엇입니까? 작성 하고 기억 하기 !
use strict;
use warnings;
use DateTime;
my $dt = DateTime->now; # Stores current date and time as datetime object
my $date = $dt->ymd; # Retrieves date as a string in 'yyyy-mm-dd' format
my $time = $dt->hms; # Retrieves time as a string in 'hh:mm:ss' format
my $wanted = "$date $time"; # creates 'yyyy-mm-dd hh:mm:ss' string
print $wanted;
무슨 일이 일어나고 있는지 알면 임시를 제거하고 몇 줄의 코드를 절약 할 수 있습니다.
use strict;
use warnings;
use DateTime;
my $dt = DateTime->now;
print join ' ', $dt->ymd, $dt->hms;
이 시도 :
use POSIX qw/strftime/;
print strftime('%Y-%m-%d',localtime);
이 strftime
방법은 나를 위해 관리 일합니다. 매우 간단하고 처음입니다.
Time :: Piece (Perl 5.10 이후 코어)에는 strftime 함수도 기본적으로 localtime 및 gmtime을 사용하여 Time :: Piece 함수를 반환합니다.
use Time::Piece;
print localtime->strftime('%Y-%m-%d');
또는 재정의 된 localtime없이 :
use Time::Piece ();
print Time::Piece::localtime->strftime('%F %T');
다음 블록을 추가 1.000.000 번 호출하는 약간의 테스트 (VM의 FreeBSD에서 Perl v5.20.1)를 만들었습니다.
ㅏ
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
비
my $now = strftime('%Y%m%d%H%M%S',localtime);
씨
my $now = Time::Piece::localtime->strftime('%Y%m%d%H%M%S');
결과는 다음과 가변적입니다.
A : 2 초
B : 11 초
C : 19 초
이것은 물론 철저한 테스트 나 벤치 마크는 아니지만 적어도 나에게는 재현 가능하므로 더 복잡하더라도 datetimestamp 생성이 매우 자주 필요한 경우 첫 번째 방법을 선호합니다.
호출 (예 : FreeBSD 10.1에서)
my $now = `date "+%Y%m%d%H%M%S" | tr -d "\n"`;
OS와 무관하고 시간이 오래 걸리기 때문에 좋은 생각이 아닐 수도 있습니다.
안부 인사, Holger
Time::Piece::datetime()
제거 할 수 있습니다 T
.
use Time::Piece;
print localtime->datetime(T => q{ });
정확한 형식이 아닌 사람이 읽을 수있는 시간 문자열을 원하는 경우 :
$t = localtime;
print "$t\n";
인쇄물
Mon Apr 27 10:16:19 2015
또는 로케일에 대해 구성된 모든 것.
짧고 달콤하며 추가 모듈이 필요하지 않습니다.
my $toDate = `date +%m/%d/%Y" "%l:%M:%S" "%p`;
예를 들어 출력은 다음과 같습니다. 04/25/2017 9:30:33 AM
많은 경우에 필요한 '현재 시간'은 $ ^ T이며, 이는 UNIX 시대 이후 전체 초 (60 초라고 가정)에서 스크립트가 실행되기 시작한 시간입니다.
이렇게하면 스크립트의 초기 부분이 스크립트의 후반 부분과 다른 날짜 (또는 일광 절약 상태)를 사용하는 것을 방지합니다 (예 : 쿼리 조건 및 기타 파생 값).
'현재 시간'의 변형의 경우 상수를 사용하여 컴파일 타임에 고정되었음을 문서화 할 수도 있습니다.
use constant YMD_HMS_AT_START => POSIX::strftime( "%F %T", localtime $^T );
다른 고해상도 시작 시간 :
0+ [ Time::HiRes::stat("/proc/$$") ]->[10]
참고 URL : https://stackoverflow.com/questions/1814196/quickly-getting-to-yyyy-mm-dd-hhmmss-in-perl
'ProgramingTip' 카테고리의 다른 글
Python-PIP 설치 문제 해결 -PermissionError : [WinError 5] 액세스가 거부되었습니다. (0) | 2020.11.26 |
---|---|
Xcode 10.3 설치 (0) | 2020.11.26 |
emacs에서 빈 파일을 어떻게 생성합니까? (0) | 2020.11.26 |
배치 파일에서 어디에서 길이를 어떻게 얻습니까? (0) | 2020.11.26 |
모든 항목을 바꿉니다. (0) | 2020.11.26 |