Python 에서 Epoch 를 만 드 는 방법

1800 단어 pythonepoch
Python 2 에서 datetime 대상 은 timestamp 방법 이 없어 서 epoch 를 쉽게 생 성 할 수 없습니다.기 존 방법 이 처리 되 지 않 으 면 오류 가 발생 하기 쉽 습 니 다.Epoch 에 대해 서 는 시간 대 와 Epoch 를 참조 할 수 있 습 니 다.
0 Python 에서 Epoch 생 성

from datetime import datetime
# python3
datetime.now().timestamp()
# python2
import time
time.mktime(datetime.now().timetuple()) #     python2 3,        
1 오류 코드

from datetime import datetime
import pytz
aware_date = datetime.utcnow().replace(tzinfo=pytz.utc)
time.mktime(aware_date.timetuple()) # bug here
2 원인
Python 의 datetime 대상 은 시간 대 정보 와 시간 대 정보 가 없 는 두 가지 대상 으로 나 뉘 는데 그것 이 바로 naive 와 aware 대상 이다.naive 를 처리 할 때 모든 것 이 시스템 시간 대 이 며 문제 가 없습니다.
Python 3 에서 timestamp 를 실행 할 때 naive 대상 에 대해 기본 시간 대 에 따라 처리(time.mktime 호출)하고 aware 대상 은 시간 대 계산 과 UTC 기준 시간의 간격 초 수 를 가 져 옵 니 다.즉,시간 대 정 보 를 고려 하 는 것 입 니 다.
파 이 썬 2 와 3 의 timetuple 방법 은 돌아 온 결과 시간 대 정 보 를 포함 하지 않 았 고 시간 대 전환 도 하지 않 았 습 니 다.즉,timetuple 을 호출 하 는 것 은 aware 날짜 대상 에 게 시간 대 정보 가 버 려 지기 때문에 time.mktime 를 호출 하면 잘못된 결 과 를 얻 을 수 있 습 니 다.
3 해결 방법
1.방법 1:다른 시간 대의 aware 날 짜 를 현재 시스템 의 기본 시간 대의 aware 대상 으로 바 꿉 니 다.시스템 시간 대 와 일치 하기 때문에 이 aware 대상 은 시간 대가 없 는 naive 대상 과 timetuple 을 실행 하 는 효과 와 같 습 니 다.
시간 대 변환 은 timezone 을 참조 합 니 다.즉,astimezone 방법 을 호출 합 니 다.매개 변 수 는 변 경 된 시간 대(tzinfo 인 스 턴 스)입 니 다.
Python 2 에 tzinfo(추상 적 인 기본 클래스)의 각 시간 대 인 스 턴 스 가 부족 하기 때문에 시간 대 대상 을 스스로 구성 해 야 합 니 다.
시간 대 인 스 턴 스 는 공식 문서 의 실현 datetime 을 참고 하거나 추천 하 는 제3자 라 이브 러 리 pytz 를 사용 할 수 있 습 니 다.
2.방법 2:시간차 계산

 _EPOCH = datetime(1970, 1, 1, tzinfo=pytz.utc) #      pytz
  (aware_date - _EPOCH).total_seconds()
이 파 이 썬 에서 Epoch 를 만 드 는 방법 은 바로 편집장 님 께 서 여러분 께 공유 해 주신 모든 내용 입 니 다.참고 해 주시 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기