2014-06-19 7 views
1

시간 변수가 udunits로 인코딩 된 데이터를 읽습니다. 즉, 시간 변수는 1-1-1 00:00:00 이후 시간입니다. 그러나 표준 윤년 규칙을 따르지 않습니다.파이썬 날짜 시간 윤년의 윤년

파이썬 datetime 개체에 1-1-1 00:00:00 이후 시간을 변환하려고하지만 datetime이 윤년 규칙을 따르기 때문에 잘못된 대답으로 끝납니다. 예를 들면 :

t_data = 17584272 # This is time stamp for January 1st, 2007 in the data file 
day = datetime.datetime(1,1,1) + datetime.timedelta(hours=t_data) 
print(day) 

결과 :

>>> 2007-01-03 00:00:00 

이 방법은 파이썬 날짜에에 '분기점'윤년 규칙이 있습니까?

미리 도움 주셔서 감사합니다.

+1

'datetime'에서 윤년을 끄는 방법은 없지만 시간 스탬프를 수정하는 방법이 있습니다. 몇 가지 예를 들려 주시겠습니까? 특히 몇 년 동안 펼쳐지는 사례가 있습니까? –

+1

짧은 대답은 아니오입니다. 파이썬을위한 일부 우드 유닛 인터페이스가있는 것처럼 보입니다. https://code.google.com/p/cfunits-python/ – jonrsharpe

+2

'17584272.0/24.0/365.0 == 2007.34'. 윤년이 없으면 날짜는 2007 년의 3 분의 1이되어야 함을 의미합니다 (예 : 4 월)). – chrisaycock

답변

1

당신의 평가에서 윤년이 적절하게 사용되지 않는다고 생각합니다. 나열한 모든 샘플은 일관성이 있습니다. 당신이 고려해야 할 약간의 상쇄가 있습니다. 오프셋이 무엇인지 알 필요가 없습니다. 알려진 날짜와 시간 수치로 시작하면됩니다.

def udtimestamp(hours): 
    return datetime.datetime(1990,1,1) + datetime.timedelta(hours=hours-17435256) 

>>> for x in (17584272,1.7435256E7,1.747908E7,1.7522904E7,1.763688E7): 
    print udtimestamp(x) 

2007-01-01 00:00:00 
1990-01-01 00:00:00 
1995-01-01 00:00:00 
2000-01-01 00:00:00 
2013-01-01 00:00:00