2016-09-25 2 views
4

파이썬 timedatetime 모듈은 윤초로 돌아갑니다. 59 : 60.5를 내가 호출하는 경우 : 우리가 (23)에있을 때파이썬은 도약에서 무엇을 반환합니까?

내가 무엇을 얻을 것이다

  • time.time()
  • datetime.datetime.utcnow()
  • datetime.datetime.now(pytz.utc)
  • 또한

, py2의 차이 .7 및 py3?


는 (적어도 나에게) 혼란 이유 : 내가 보는 datetime docs에서

: 시간 모듈과는 달리

는 날짜 모듈은 윤초를 지원하지 않습니다.

time docsstrptime으로 구문 분석 할 때 윤초에 대한 "지원"이 있음을 확인했습니다. 그러나 time.time()에 대한 의견은 없습니다.

는 내가 얻을 time를 사용하는 것을 볼 수 :

>>> time.mktime(time.strptime('2016-06-30T23:59:59', "%Y-%m-%dT%H:%M:%S")) 
1467327599.0 
>>> time.mktime(time.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S")) 
1467327600.0 
>>> time.mktime(time.strptime('2016-07-01T00:00:00', "%Y-%m-%dT%H:%M:%S")) 
1467327600.0 

그리고 datetime 그냥 불면 :

다음
>>> dt.datetime.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in &lt;module> 
ValueError: second must be in 0..59 

제가 (윤초의 중간에) 그 정확한 시간에 얻을 것이다 ?

고무 시간, 시계 속도 저하, 초 단위 반복 및 모든 종류의 미친 아이디어에 대해 읽었지만 파이썬에서 무엇을 기대해야합니까?

참고 : 내가 신경 쓰지 않는 것이 더 궁금한 경우에는 도약 초가 다가오고 있습니다 !!!!

+0

http://stackoverflow.com/questions/21027639/python-datetime-not-accounting-for-leap-second-properly –

+1

나는 아무 일도 일어나지 않을 것으로 기대합니다. * 컴퓨터 시계 *는 윤초를 존중하지 않습니다. 다음 ntp 클럭이 동기화 될 때까지 계속 진행되며 그 후에 컴퓨터 시계가 다시 올바르게됩니다. –

+0

@PadraicCunningham : 모든 날짜/시간 게시물은 datetime으로 윤초를 나타내는 법에 대한 것입니다. 이것은 정확한 도약 순간에 * 처리 할 때 일어날 일에 관한 것입니다. 현재 컴퓨터에서 컴퓨터 시계가 '아무것도'를 의미하지 않는 이유는 컴퓨터 시계가 통합되기 전에 컴퓨터 시계를 알려주는 기능이 없기 때문입니다. –

답변

3

도약 초는 간혹 으로 예약됩니다. 현재 컴퓨터 시계에는 윤초를 기리는 기능이 없습니다. 그 (것)들에게 하나를 삽입하기 위하여 정면을 말하는 아무 표준도 없다. 컴퓨터 시계는 주기적으로 NTP 프로토콜을 통해 시간을 다시 동기화하고 윤초가 삽입 된 후 자동으로 조정합니다.

다음으로 컴퓨터 시계는 대개 초로 이후로보고합니다. 윤초를 포함하도록 두 번째 계산을 변환 할 때 계정을 조정하려면 최대 datetime 모듈이 필요합니다. 그것은 현재 이것을하지 않습니다. time.time()은 시간 경과 초를 기준으로 시간 수를보고합니다.

전혀 다른은 윤초가 공식적으로 적용될 때 발생합니다. 컴퓨터 시계는 잠시 동안 1 초가됩니다.

datetime의 문제는 을 나타내며을 나타내는 윤년 초의 타임 스탬프는 아닙니다. 어쨌든 그렇게 할 것을 요구받지 않을 것입니다.

+0

이것은 "지정되지 않았다"는 것을 의미하며 코드는 NTP가 컴퓨터에 어떻게 배치 될 것인지를 알고 있어야합니다. ('datetime'을 계속 사용하고 'astropy.time', thanks @MaxNoe와 같은 라이브러리로 이동하지 않을 것이라고 가정) –

+1

@MarioCorchero : 아니요, 지정하지 않았다고 말하지 않았습니다. 컴퓨터 시계는 윤초에 대해 알지 못하므로 모든 문제는 무시됩니다. 당신의 컴퓨터 시계는 NTP가 사용되는 이유이기 때문에 * 어쨌든 * 정확하지 않습니다. 컴퓨터는 항상 해당 프로토콜을 통해 시계를 주기적으로 조정합니다. 코드에서 수행해야하는 유일한 작업은 시간이 항상 앞으로 나아갈 것이라고 가정하지 않는 것입니다 (NTP 조정 및 시간대로 인해 시간이 뒤처질 수 있음). –

+0

@MarioCorchero : 대다수의 프로그램의 경우 이것은 전적으로 문제가 아닙니다. UTC 타임 스탬프가 매우 중요한 경우 * 절대 타이밍 정밀도가 필요한 유스 케이스가있는 경우 Python을 사용하지 않고 컴퓨터 시계에 의존하지 마십시오. 대신 전문 타이밍 장비로 자신을 설정하십시오. –