우리가 시간을 재는 방식은 좀 엉망이에요. 1분은 60초이고, 1시간은 60분이에요. 이것은 60을 수 체계의 기반으로 삼았던 고대 바빌로니아에서 비롯되었어요. 하루는 24시간이고, 일주일은 7일이며, 한 달은 며칠일까요? 글쎄요, 한 달의 날짜 수는 어느 달인지뿐만 아니라 사는 나라에서 어떤 종류의 달력을 사용하는지에 따라서도 달라져요.
그렇다면 시간 간격을 표현할 때 초만 사용하면 어떨까요? 그러면 많은 수의 초를 훨씬 알아보기 쉬운 단위로 적기 위해 미터법 접두사를 사용할 수 있어요.
언젠가 화성이나 다른 행성을 개척하게 된다면, 시간을 재는 일은 훨씬 더 엉망이 될 거예요. 누군가 "year"라고 말할 때 지구의 1년을 뜻하는 걸까요, 아니면 화성의 1년을 뜻하는 걸까요?
이 연습 문제의 아이디어는 작가 Vernor Vinge의 SF 소설 "A Deepness in the Sky"에서 나왔어요. 소설에서 작가는 미터법을 시간 측정의 기반으로 사용해요.
특정 날짜로부터 기가초가 하나 지난 뒤의 날짜와 시간을 구하는 것이 과제예요.
기가초는 10억 초예요. 1 뒤에 0이 아홉 개 붙은 수죠.
2015년 1월 24일 22:00(오후 10시) 에 태어났다면, 기가초가 되는 날은 2046년 10월 2일 23:46:40(오후 11시 46분 40초) 예요.
이 연습 문제에서는 GNU awk의 시간 함수를 사용해야 해요.
날짜와 시간을 파싱하고 형식을 지정하는 함수에서는 UTC 플래그를 설정해야 해요. 예를 들어 볼까요:
export TZ=Asia/Kolkata
gawk 'BEGIN {
time = 1234567890
print strftime("%Y-%m-%d %T", time) # format for local timezone
print strftime("%Y-%m-%d %T", time, 1) # format for UTC
}'
출력 결과는 다음과 같아요:
2009-02-14 05:01:30
2009-02-13 23:31:30