기가초

기가초

보통

소개

우리가 시간을 재는 방식은 좀 엉망이에요. 1분은 60초이고, 1시간은 60분이에요. 이것은 60을 수 체계의 기반으로 삼았던 고대 바빌로니아에서 비롯되었어요. 하루는 24시간이고, 일주일은 7일이며, 한 달은 며칠일까요? 글쎄요, 한 달의 날짜 수는 어느 달인지뿐만 아니라 사는 나라에서 어떤 종류의 달력을 사용하는지에 따라서도 달라져요.

그렇다면 시간 간격을 표현할 때 초만 사용하면 어떨까요? 그러면 많은 수의 초를 훨씬 알아보기 쉬운 단위로 적기 위해 미터법 접두사를 사용할 수 있어요.

  • 요리 레시피에서 브라우니를 오븐에 2킬로초(2,000초) 동안 구우라고 알려줄 수도 있어요.
  • 어쩌면 가족과 함께 2메가초(200만 초) 동안 이국적인 곳으로 여행을 떠날 수도 있어요.
  • 그리고 배우자와 10억 초 동안 결혼 생활을 했다면, 결혼 1기가초 기념일을 축하하게 될 거예요.
Note

언젠가 화성이나 다른 행성을 개척하게 된다면, 시간을 재는 일은 훨씬 더 엉망이 될 거예요. 누군가 "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초) 예요.

bash로 해결하는 방법

bash에는 날짜와 시간 문자열을 파싱하는 내장 기능이 없어요. 이 연습 문제에서는 외부 도구를 호출해야 해요.

  • GNU date 명령의 -d 옵션은 다양한 형식을 파싱할 수 있어요.
  • Mac 사용자는 BSD date 명령과 그 -f 옵션을 참고해요.
  • Perl은 널리 사용할 수 있고, Time::Piece 모듈로 타임스탬프를 파싱할 수 있어요.

bash는 외부 도구 없이도 날짜를 포맷할 수 있어요. 정수 시간 값(에포크 이후 초)이 주어지면, printf의 %()T 포맷터로 "strftime" 스타일 포맷팅을 적용할 수 있어요.

epoch=1234567890

printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-13 18:31:30

# bash uses the `TZ` environment variable for the timezone.

TZ=Asia/Kolkata printf '%(%Y-%m-%d %H:%M:%S)T\n' "$epoch"
# ==> 2009-02-14 05:01:30
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Bash Exercism

기가초 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Bash 트랙을 연습 문제 97개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.