어떤 언어를 배우더라도 문자열 다음에 공통으로 다뤄야 하는게 있다면 시간을 다루는 함수이다.

 

시간에 관해서는 보통 운영체제(OS)를 통해서 시스템 값을 얻어오도록 되어있다.

 

컴퓨터의 시간 체계는 조금 특이한데 컴퓨터의 시스템 시간은 epic time 이라는 특정일을 기준으로 밀리세컨드(천분의1초) 단위로 반환된다. epic time은 1970년 1월1일 표준시로 0시가 기준이다. 1970년을 기준으로 한 것은 그 시대 초창기 과학자들의 재치라고 생각된다. 만일 달력에 맞출려고 AC를 사용하면 2000년 전인데 시간을 측정하기 위해서 너무 메모리를 많이 사용하게 된다. 당시 컴퓨터 하드웨어 성능이 아직 부족했던 것도 영향을 미쳤을 것이다.

 

설계를 그렇게 해놨기 때문에 1970년대 이전의 date를 사용하려고 하면 오류가 발생한다. 직접 날짜 관련 함수를 만들거나 다른 방식을 사용해야 한다. 이제와서 1970년대 이전의 데이터를 얼마나 다루겠느냐 마는 일말의 아쉬움은 남는다. 그래도 70년대면 나름의 컴퓨터와 디지털 데이터가 발생하던 시대였다.

 

루아에서도 확인 가능하다.

 

temp = os.date("%c", 0)
print(temp)

os 라이브러리를 사용해서 가져온 시간 포맷이다. 시간 포맷에 대하여는 이 포스트의 뒷부분에 정리해두었다. 1970년 1월1일 9시를 가리키고 있는데 이것은 한국의 로컬시간이 GMT + 9:00 이기 때문이다. 국제 표준시 기준으로 - 9:00 시간을 빼면 0시가 된다.

 

날짜를 읽을 때 서양에서는 월, 일, 연도 의 방식을 사용한다. 한국과 동양은 연, 월, 일 인데 서양의 날짜는 월과 일이 먼저 나온다. 동서양이 시간을 바라보는 관점의 차이가 담겨있다.

 

* os.time() 은 epic time 부터 현재까지의 시간을 계산한다. 이 값은 시간과 함께 항상 증가하는데 과거의 epic time을 측정한 블로그 포스팅들을 보면 세월의 무상함도 느끼게 해준다. 오늘의 시간은 1608177300 이다.

print(os.time())

temp = os.time{year=1999, month=1, day=20, hour=10 }
print(os.date("%c", temp))

 

문자열 포맷은 아래와 같다. os.date는 기본으로 현재 시간을 반환하니까 날짜 형식을 만들수 있을 것이다.

 

%a abbreviated weekday name (e.g., Wed)
%A full weekday name (e.g., Wednesday)
%b abbreviated month name (e.g., Sep)
%B full month name (e.g., September)
%c date and time (e.g., 09/16/98 23:48:10)
%d day of the month (16) [01-31]
%H hour, using a 24-hour clock (23) [00-23]
%I hour, using a 12-hour clock (11) [01-12]
%M minute (48) [00-59]
%m month (09) [01-12]
%p either "am" or "pm" (pm)
%S second (10) [00-61]
%w weekday (3) [0-6 = Sunday-Saturday]
%x date (e.g., 09/16/98)
%X time (e.g., 23:48:10)
%Y full year (1998)
%y two-digit year (98) [00-99]
%% the character `%´

 

현재 시각을 다음과 같이 사용할 수 있다. 이 정도의 정보만 있으면 시계를 만드는 것 은 어렵지 않을 것이다.

temp = os.date("%Y년 %m월 %d일 %A %H시 %M분 %S초")
print(temp)

 

*  os.clock의 사용

 

프로세스 실행시간의 측정 등에 사용한다. float 형으로 밀리세컨까지 표현한다. 아래는 1천만번 for 루프를 돌리고 측정한 시간이다.

 

local x = os.clock()
local sum = 0
for i=1,10000000 do sum = sum + i end

print(string.format("elapsed time: %.3f\n", os.clock() - x))

 

* 참고 Lua 공식문서

Programming in Lua : 22.1

공유하기

facebook twitter kakaoTalk kakaostory naver band