"Python datetime 모듈 quick reference"의 두 판 사이의 차이
도구의인간 메이커스 위키
(새 문서: # datetime 모듈 quick reference 공식문서 참고: https://docs.python.org/ko/3/library/datetime.html 쉬운 한글자료: https://python.bakyeono.net/chapter-11-3.html 일상생...) |
(차이 없음)
|
2019년 9월 11일 (수) 19:21 기준 최신판
목차
datetime 모듈 quick reference
공식문서 참고: https://docs.python.org/ko/3/library/datetime.html 쉬운 한글자료: https://python.bakyeono.net/chapter-11-3.html 일상생활에서 사용하는 날짜와 시간을 다루기 위한 파이썬 기본 모듈. 날짜를 나타내는 datetime.date class, 시각을 나타내는 datetime.time class, 둘 모두를 나타내는 datetime.datetime class 를 가지고 있다.
당연하게도 OS에서 현재 timezone과 시간이 올바르게 셋팅되어있어야한다. 라즈베리파이에서는 raspi-config 프로그램으로 타임존을 셋팅해주면 된다.
OS 기반의 시간을 다루는 time 모듈도 있으니 참고.
datetime.date class
- 특정날짜 객체 생성: datetime.date(1978,8,6)
- 오늘날짜 객체 생성: datetime.date.today()
# datetime.date-test.py from datetime import date print(date(1978,8,6)) print(date.today()) # 1978-08-06 # 2019-08-14
datetime.date class 속성 또는 메서드 | 값 또는 기능 |
---|---|
year | 년 |
month | 월 |
day | 일 |
weekday() | 요일 (월요일=0, 일요일=6) |
isoformat() | ISO 표준 문자열 표현 “년-월-일”(예: 1986-03-06)과 같은 형식 |
strftime(format) | 형식을 지정하여 표현 (자료 참고) |
# datetime.date-test.py from datetime import date myBirthDay = date(1978,8,6) today = date.today() print(myBirthDay) print(today) # 1978-08-06 # 2019-08-14 print('나는 %d년 %d월 %d일에 태어남' %(myBirthDay.year, myBirthDay.month,myBirthDay.day)) # 나는 1978년 8월 6일에 태어남 day = '월화수목금토일'[today.weekday()] print('오늘은 %s요일이에요' %day) # 오늘은 수요일이에요
datetime.time class
밀리세컨드까지 특정해 표현가능.
- 특정 시각 객체 생성: datetime.time(13,30,0,100000) # 13시30분0초.100000 |datetime.time class 속성 또는 메서드| 값 또는 기능| |-|-| hour |시 minute| 분 second |초 microsecond |마이크로초 isoformat() I|SO 표준 문자열 표현 strftime(format) |임의 형식으로 문자열 표현
# python interpreter >>> from datetime import time >>> at = time(15, 30, 45) >>> at.hour, at.minute, at.second # 시, 분, 초 (15, 30, 45) >>> at.microsecond # 마이크로초 0 >>> at.isoformat() # ISO 표준 문자열 표현 '15:30:45'
isoformat 문자열을 다시 datetime객체로
- datetime.fromisoformat(string)
datetime.datetime class
datetime.date 와 datetime.time 을 합쳐놓은 class. 양쪽의 속성과 메소드를 모두 사용할 수 있다.
- 특정 일시 객체 생성: datetime(년, 월, 일, 시, 분, 초, 마이크로초)
- 현재 일시 객체 생성: datetime.now()
- 날짜와 시각 결합: datetime.combine(날짜, 시각)
# python interpreter >>> from datetime import datetime >>> datetime(2017, 11, 14) datetime.datetime(2017, 11, 14, 0, 0) >>> datetime(2017, 11, 14, 8, 30) datetime.datetime(2017, 11, 14, 8, 30) >>> datetime(2017, 11, 14, 8, 30, 50, 200000) datetime.datetime(2017, 11, 14, 8, 30, 50, 200000) >>> datetime.now() # 현재 일시 datetime.datetime(2017, 11, 14, 19, 4, 7, 950704) >>> datetime.combine(date.today(), time(15)) # 오늘 3시 datetime.datetime(2017, 11, 14, 15, 0) >>> now = datetime.now() >>> now.year, now.month, now.day, '월화수목금토일'[now.weekday()] (2017, 11, 14, '화') >>> now.hour, now.minute, now.second, now.microsecond (19, 8, 52, 283277) >>> now.date(), now.time() (datetime.date(2017, 11, 14), datetime.time(19, 8, 52, 283277)) >>> now.isoformat() '2017-11-14T19:08:52.283277'
datetime.timedelta class
두시간 사이의 차를 나타내는 timedelta class를 사용가능하다. 예를 들어, date2 = date1 + timedelta timedelta = date1 - date2 와 같은 연산이 가능하다. 자세한 내용은 참고자료 검토.
# python interpreter >>> from datetime import datetime, timedelta >>> now = datetime.now() # 현재 일시 >>> after_1000h = timedelta(hours=1000) # 1천 시간 >>> now + after_1000h # 지금부터 1천 시간 후 datetime.datetime(2017, 12, 26, 11, 42, 32, 103816) >>> birthday = date(1986, 3, 6) # 생년월일 >>> today = date.toady() # 오늘 >>> today - birthday # 태어난 뒤 오늘까지의 기간 datetime.timedelta(11576)
세계시계 datetime.tzinfo class
- time 이나 datetime 오브젝트의 멤버변수인 tzinfo가 None이 아닌 값(tzinfo나 그 서브클래스인 timezone 오브젝트)을 갖는 경우 세계시계로 작동하게 된다. (공식 문서에서 aware 라고 표현됨.)
- 생성자에
tzinfo=
아규먼트를 넣어줌으로써 세계시계작동시킨다. - 써머타임 등 고려해 직접 tzinfo의 서브클래스를 작성 토록되어있지만(tzinfo는 추상클래스다) utc+9:00(서울 ) 등등 대부분의 간단한 경우를 나타내기 위해 이미 만들어져있는 timezone class를 사용할 수 있다.
참고: https://spoqa.github.io/2019/02/15/python-timezone.html
>>> from datetime import datetime, timedelta, tzinfo, timezone >>> datetime.utcnow() datetime.datetime(2019, 8, 14, 21, 12, 22, 857347) # 영국 그리니치의 현재시간을 표시하고있기는 하지만 tzinfo=None으로, 세계시간 aware 하지는 않다. >>> datetime.now(timezone.utc) datetime.datetime(2019, 8, 14, 21, 14, 17, 112890, tzinfo=datetime.timezone.utc) # 세계시간 aware한 세계표준시 >>> seoulnow = datetime.now(timezone(timedelta(hours=9))) # utc+9:00 (서울표준시) >>> seoulnow datetime.datetime(2019, 8, 15, 6, 18, 34, 177299, tzinfo=datetime.timezone(datetime.timedelta(0, 32400))) >>> seoulnow.utcoffset() datetime.timedelta(0, 32400) # 세계표준시와 시차 >>> seoulnow.tzname() 'UTC+09:00' # 타임존 이름보기 >>> seoulnow.astimezone(timezone(timedelta(hours=-4))) # 같은 시간을 뉴욕표준시(utc-4:00)로 표현하면? datetime.datetime(2019, 8, 14, 17, 18, 34, 177299, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))