[PYTHON] Python datetime strptime () 및 strftime () : 표준 시간대 정보 보존 방법
PYTHONPython datetime strptime () 및 strftime () : 표준 시간대 정보 보존 방법
다음 코드를 참조하십시오.
import datetime
import pytz
fmt = '%Y-%m-%d %H:%M:%S %Z'
d = datetime.datetime.now(pytz.timezone("America/New_York"))
d_string = d.strftime(fmt)
d2 = datetime.datetime.strptime(d_string, fmt)
print d_string
print d2.strftime(fmt)
출력은이다.
2013-02-07 17:42:31 EST
2013-02-07 17:42:31
시간대 정보가 단순히 번역에서 손실되었습니다.
'% z'를 '% z'로 전환하면
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
나는 python-dateutil을 사용할 수 있다는 것을 알고 있지만 datetime에서이 간단한 기능을 수행 할 수없고 더 많은 의존성을 도입해야한다는 사실을 알게되었습니다.
해결법
-
==============================
1.여기서 문제의 일부는 일반적으로 시간대를 나타내는 데 사용되는 문자열이 실제로 고유하지 않다는 것입니다. "EST"는 북미 사람들에게만 "America / New_York"을 의미합니다. 이것은 C 시간 API의 한계이며, Python 솔루션은 ... 누군가가 PEP를 기꺼이 쓸 수 있다면 어떤 미래의 버전에서든 완전한 tz 기능을 추가 할 수 있습니다.
여기서 문제의 일부는 일반적으로 시간대를 나타내는 데 사용되는 문자열이 실제로 고유하지 않다는 것입니다. "EST"는 북미 사람들에게만 "America / New_York"을 의미합니다. 이것은 C 시간 API의 한계이며, Python 솔루션은 ... 누군가가 PEP를 기꺼이 쓸 수 있다면 어떤 미래의 버전에서든 완전한 tz 기능을 추가 할 수 있습니다.
시간대를 오프셋으로 형식을 지정하고 구문 분석 할 수는 있지만 일광 절약 시간 / 여름 시간 정보가 손실됩니다 (예 : 'America / Phoenix'를 여름에 'America / Los_Angeles'와 구분할 수 없음). 시간대는 3 자의 약어로 지정할 수 있지만 그걸 다시 파싱 할 수는 없습니다.
희미하고 모호한 것이지만 보통 원하는 것을 원하면 dateutil과 같은 타사 라이브러리가 필요합니다.
실제로 모호한 것을 원한다면 로컬 datetime 문자열에 실제 tz 이름을 추가하고 다른 끝에서 다시 분리하십시오.
d = datetime.datetime.now(pytz.timezone("America/New_York")) dtz_string = d.strftime(fmt) + ' ' + "America/New_York" d_string, tz_string = dtz_string.rsplit(' ', 1) d2 = datetime.datetime.strptime(d_string, fmt) tz2 = pytz.timezone(tz_string) print dtz_string print d2.strftime(fmt) + ' ' + tz_string
또는 그 둘 사이의 중간에, 이미 "EST"와 같은 형식을 구문 분석 할 수있는 pytz 라이브러리를 사용하고 있습니다. 그래서, 정말로 원한다면, % Z를 포맷팅면에 남겨두고, 나머지 부분을 strptime에 전달하기 전에 pytz.timezone ()으로 구문 분석하여 파싱하십시오.
-
==============================
2.안타깝게도 strptime ()은 OS가 설정 한 시간대 만 처리 할 수 있으며 실제로는 시간 오프셋으로 처리 할 수 있습니다. 문서에서 :
안타깝게도 strptime ()은 OS가 설정 한 시간대 만 처리 할 수 있으며 실제로는 시간 오프셋으로 처리 할 수 있습니다. 문서에서 :
strftime ()은 % z를 공식적으로 지원하지 않습니다.
Python-Dateutil을 사용하여 시간대 파싱을 지원해야합니다.
-
==============================
3.파이썬 2.7에서 내 대답은 다음과 같습니다.
파이썬 2.7에서 내 대답은 다음과 같습니다.
from datetime import datetime import tzlocal # pip install tzlocal print datetime.now(tzlocal.get_localzone()).strftime("%Y-%m-%d %H:%M:%S %z")
from datetime import datetime import pytz # pip install pytz print datetime.now(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d %H:%M:%S %z")
그것은 뭔가를 인쇄 할 것입니다.
2017-08-10 20:46:24 +0800
from https://stackoverflow.com/questions/14762518/python-datetime-strptime-and-strftime-how-to-preserve-the-timezone-informat by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 "connection refused"오류가 발생하는 이유는 무엇입니까? (소켓) (0) | 2018.10.18 |
---|---|
[PYTHON] numpy float : 산술 연산에 내장 된 것보다 10 배 느린가? (0) | 2018.10.18 |
[PYTHON] 정확히 PYTHONPATH에 무엇을 설정해야합니까? (0) | 2018.10.18 |
[PYTHON] 파이썬의 로깅 형식이 메시지 로그 수준에 따라 수정 될 수 있습니까? (0) | 2018.10.18 |
[PYTHON] ValueError : 닫힌 파일에 대한 I / O 작업 (0) | 2018.10.18 |