[펌]한빛미디어
유닉스와 리눅스는 1970-01-01 00:00:00부터 현재 시간까지의 초를 누적한 시간을 사용합니다.
그럼 1970년 1월 1일 0시 0분 0초는 어떻게 시작된 것일까요? 유닉스는 최초 개발 이후 시간 정보를 기록하기 위해 임의 날짜를 결정할 필요가 있었는데 공교롭게도 그 날짜를 1970년 1월 1일 0시 0분 0초라고 삼은 것입니다. 많은 사람들이 유닉스 시간이 1970년부터 시작하는 이유를 유닉스의 탄생 시각으로 알고 있지만 그건 사실이 아닙니다. 이미 1960년대 후반에 거칠게 만들어진 유닉스가 있었기 때문이죠.
유닉스 타임스탬프를 조금 더 쉽게 이해해볼까요? 여러분이 이 글을 읽는 시점부터 43초 뒤는 몇시 몇분 몇초일까요? 아마도 바로 대답하기 힘들 것입니다. 그런데 1970년 1월 1일 0시 0분 0초부터 43초라면 금방 계산해낼 수 있을 겁니다. 0초부터 시작하니 당연히 쉽게 계산해낼 수 있을 것이고 '초'로부터 분/시/일/월/연까지 계산해낼 수 있으니 유닉스 기준으론 초를 누적하는 것이 당연히 유리할 수 밖에 없습니다.
그럼 여러분께 질문을 던져볼게요. 한국에서 1970년 1월 1일 0시 0분 0초는 독일에서도 1970년 1월 1일 0시 0분 0초일까요? 이 질문의 답을 생각해냈다면 여러분은 지구가 둥글다는 사실을 인지했을 겁니다. 지구가 둥글다면 지구상의 어딘가는 태양 또는 달빛을 받는 시간대가 다르기 때문에 지구의 위치별로 시간은 동일하지 않다는 사실을 이해하게 됐을 겁니다.
이 때는 기준이 되는 시간이 필요한데 지구에선 이 시간을 크게 2가지 방법으로 나눠서 부릅니다. GMT와 UTC. 1970년 1월 1일 0시 0분 0초라면 GMT는 영국 그리니치 천문대를 기준으로 그리니치 천문대 왼쪽 방향은 – 시간대를, 오른쪽 방향은 + 시간대를 말합니다. 한국은 가슴 아픈 이야기지만 일제시대에 일제에 의해 도쿄와 함께 +9 시간대로 분류하고 있습니다. 반면 UTC는 협정 세계시라고 하는데 세슘의 원자 진동수를 기반으로 하는 시간대를 말하며 일반적으로 GMT와 값이 같습니다.
일반적으로 태양을 기준으로 하는 시간을 '태양시'라고 하는데 지구는 자전할 때 대부분은 일정한 속도로 자전하지만 자기장의 영향을 강하게 받을때는 느리게 자전하거나 조금 빠르게 움직이기도 합니다. 이 때문에 '태양시' 기준으로만 하면 정확한 시간을 알 수 없습니다. 이 문제를 해결하기 위해 '태양시'에 지구의 자전을 고려한 보정을 초단위로 하는데 이 시간을 '윤초'라고 합니다.
그런데 유닉스 타임스탬프는 이 '윤초'를 고려하지 않기 때문에 정확한 시간을 알 순 없지만 그럼에도 불구하고 태양시 기준으로 시간과 날짜를 표현하기에 좋은 방법입니다.
time.
time
() → floatReturn the time in seconds since the epoch as a floating point number. The specific date of the epoch and the handling of leap seconds is platform dependent. On Windows and most Unix systems, the epoch is January 1, 1970, 00:00:00 (UTC) and leap seconds are not counted towards the time in seconds since the epoch. This is commonly referred to as Unix time. To find out what the epoch is on a given platform, look atgmtime(0)
.
Note that even though the time is always returned as a floating point number, not all systems provide time with a better precision than 1 second. While this function normally returns non-decreasing values, it can return a lower value than a previous call if the system clock has been set back between the two calls.
The number returned by time()
may be converted into a more common time format (i.e. year, month, day, hour, etc…) in UTC by passing it to gmtime()
function or in local time by passing it to the localtime()
function. In both cases a struct_time
object is returned, from which the components of the calendar date may be accessed as attributes.
time.
localtime
([secs])Like
gmtime()
but converts to local time. If secs is not provided orNone
, the current time as returned bytime()
is used. The dst flag is set to1
when DST applies to the given time.
time.
mktime
(t)This is the inverse function of
localtime()
. Its argument is thestruct_time
or full 9-tuple (since the dst flag is needed; use-1
as the dst flag if it is unknown) which expresses the time in local time, not UTC. It returns a floating point number, for compatibility withtime()
. If the input value cannot be represented as a valid time, eitherOverflowError
orValueError
will be raised (which depends on whether the invalid value is caught by Python or the underlying C libraries). The earliest date for which it can generate a time is platform-dependent.
-------------------------------------------
import time
time.time()
Out[2]: 1552983448.9236054
=> 1970.1.1 자정이후 현재까지 누적된 시간
time.gmtime()
Out[3]: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=19, tm_hour=8, tm_min=17, tm_sec=54, tm_wday=1, tm_yday=78, tm_isdst=0)
t = time.localtime()
Out[5]: time.struct_time(tm_year=2019, tm_mon=3, tm_mday=19, tm_hour=17, tm_min=18, tm_sec=56, tm_wday=1, tm_yday=78, tm_isdst=0)
time.mktime(t)
Out[8]: 1552983561.0
=> time()과 같은 누적된 초를 반환
'컴퓨터이야기' 카테고리의 다른 글
np.argsort 역순으로 (0) | 2019.04.17 |
---|---|
[펌]Kullback-Leibler Divergence (0) | 2019.04.15 |
MNIST 러닝 (0) | 2019.02.20 |
[펌] Summary: Best Facial Recognition APIs for Apps and Software (0) | 2018.08.24 |
[펌]유니그램 모델 (0) | 2018.07.24 |