Programming

[Perl] timestamp를 formatted time string으로 변환하는 방법

[ CnUnix ] in KIDS
글 쓴 이(By): guest (guest) <203.236.3.241>
날 짜 (Date): 2000년 11월 18일 토요일 오후 03시 20분 42초
제 목(Title): [질문] Log의 time stamp 보는방법은 ?

로그의 timestamp가 974361764.794 와 같이 나오는데,
이걸 perl formating하면 Thu Nov 16 17:02:44 2000 와 같이 나온다고 합니다.
이 방법은 어떻게 되는지요…

제가 perl은 하나도 몰라서, formating perl source를 봐도 까막눈이라서…
혹시 C source라도 가지고 계시거나 설명가능하신 분 계시면 부탁드립니다.

#! /user/bin/perl -p
s/^\d+\.\d+/localtime $&/e;

[ CnUnix ] in KIDS
글 쓴 이(By): hoo (댕기)
날 짜 (Date): 2000년 11월 18일 토요일 오후 07시 07분 51초
제 목(Title): Re: [질문] Log의 time stamp 보는방법은 ?

man mktime 해보심이

[ CnUnix ] in KIDS
글 쓴 이(By): guest (guest) <203.236.3.225>
날 짜 (Date): 2000년 11월 20일 월요일 오전 10시 30분 00초
제 목(Title): Re: [질문] Log의 time stamp 보는방법은

mktime은 broken down structure를 calender format으로 변경해 주는데, 제가 물어본 974361764.794은 broken down structure가 아닌것 같은데, 이것과 mktime은 무슨 관계인가요?

저는 974361764.794를 C를 이용해서 Thu Nov 16 17:02:44 2000로 변경하고 싶거든요?

혹시 974361764.794를 broken down struct로 바꾸는 방법이 있나요? 다시한번 도움 부탁드립니다.

[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (microkid)
날 짜 (Date): 2000년 11월 20일 월요일 오전 11시 32분 11초
제 목(Title): Re: [질문] Log의 time stamp 보는방법은

localtime에 들어가는 값은 time에 의해 반환되는 값이라고 할 수 있습니다. time함수는 1970년 1월 1일부터의 초의 수를 반환하죠.

Perl 5 책에 보면 이렇게 나와 있군요.

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
    localtime(time)

그 정규표현식

s/^\d+\.\d+/localtime $&/e

는 이런 뜻입니다.

“정수.정수”의 포맷이면 그걸 localtime이라는 함수에 넣어서 그 값을 반환하라

그러니깐 정말 별 거 아닌 정규표현식입니다. localtime 974361764.794과 똑같은 거죠. 근데 Perl에서 소수점이하가 의미있는지 모르겠군요. 아마 millis를 나타내고 싶었던가 그렇겠죠.

C에서는 1970년 1월 1일부터의 second의 수를 time_t 타입에 넣도록 하고 있습니다. time_t time(time_t *calptr)을 사용하면 974361764.794가 나오는 거죠. 이걸 gmtime이나 localtime에 넣으면 struct rm *localtime(const time_t *calptr)이기 때문에 struct rm * 즉 broken down time 구조체가 되는 겁니다.

이거 그냥 찍으시면 되겠죠? strftime같은 함수 있으니까요.

그럼 좋은 하루 되세요.

답글 남기기