파이썬 시간/날짜 모듈 (datetime 모듈, datetime 클래스의 모든 메소드 설명)
파이썬 시간/날짜 모듈 (datetime 모듈, datetime 클래스의 모든 메소드 설명)
datetime 모듈은 파이썬에서 시간/날짜 관련 클래스와 함수를 제공하는 모듈입니다. 이번 글에서는 datatime 모듈 안에 있는 datetime클래스를 공부해봅시다.
datatime 모듈 구조 -> datatime 클래스 구조 의 순서로 살펴봅시다. 아래는 datatime 모듈의 구조입니다.
>>> import datetime
>>> dir(datetime)
['MAXYEAR',
'MINYEAR',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'date',
'datetime',
'datetime_CAPI',
'sys',
'time',
'timedelta',
'timezone',
'tzinfo']
datetime 클래스가 보입니다. datetime 클래스의 입력형식은 아래와 같습니다.
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
year, month, day 인자는 필수입니다. 나머지 인자들의 입력 가능범위는 아래와 같습니다.
MINYEAR <= year <= MAXYEAR,
1 <= month <= 12,
1 <= day <= 주어진 month와 year에서의 날 수,
0 <= hour < 24,
0 <= minute < 60,
0 <= second < 60,
0 <= microsecond < 1000000,
fold in [0, 1].
fold는 같은 시간에 대해 2가지 다른 시간표현을 갖는 경우 이를 조정해주는 값입니다. 예를 들면 썸머타임이 있습니다. tzinfo는 UTC 시간을 기준으로 하여 오프셋, 시간대 이름, 일광절약시간 적용여부등의 정보를 입력합니다.
아래는 datetime 인스턴스 생성 예시입니다.
>>> mdtt=datetime.datetime(2020,3,12,5,12,30)
datetime.datetime(2020, 3, 12, 5, 12, 30)
이 클래스에 어떤 메소드를 사용할수 있는지 알아봅시다. 아래는 datetime 클래스의 구조입니다.
>>> dir(datetime.datetime)
['__add__',
'__class__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__ne__',
'__new__',
'__radd__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__rsub__',
'__setattr__',
'__sizeof__',
'__str__',
'__sub__',
'__subclasshook__',
'astimezone',
'combine',
'ctime',
'date',
'day',
'dst',
'fold',
'fromisoformat',
'fromordinal',
'fromtimestamp',
'hour',
'isocalendar',
'isoformat',
'isoweekday',
'max',
'microsecond',
'min',
'minute',
'month',
'now',
'replace',
'resolution',
'second',
'strftime',
'strptime',
'time',
'timestamp',
'timetuple',
'timetz',
'today',
'toordinal',
'tzinfo',
'tzname',
'utcfromtimestamp',
'utcnow',
'utcoffset',
'utctimetuple',
'weekday',
'year']
위 어트리뷰트와 메소드들을 하나씩 알아봅시다. 아래와 같이 크게 셋으로 나뉩니다.
1. 어트리뷰트
2. 클래스 메서드
3. 인스턴트 메서드
하나씩 알아봅시다.
1. 어트리뷰트
1) min
표현가능한 최소 날짜를 반환합니다.
>>> datetime.datetime.min
datetime.datetime(1, 1, 1, 0, 0)
2) max
표현 가능한 최대 날짜를 반환합니다.
>>> datetime.datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
4) resolution
입력 형식 하에서 가장 작은 차이를 반환합니다.
>>> datetime.datetime.resolution
datetime.timedelta(microseconds=1)
5) year
입력된 연도를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).year
2020
6) day
입력된 일(day)을 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).day
12
7) hour
입력된 시(hour)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).hour
5
8) minute
입력된 분(minute)을 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).minute
12
9) second
입력된 초(second)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).second
30
10) microsecond
입력된 마이크로초(microsecond)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).microsecond
0
11) tzinfo
입력된 tzinfo 값을 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).tzinfo
12) fold
입력된 fold 값을 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).fold
0
2. 클래스 메서드
1) today
현재 지역 시간의 datetime 인스턴스를 반환합니다. tzinfo는 None입니다.
>>> datetime.datetime.today()
datetime.datetime(2020, 11, 23, 14, 5, 20, 763000)
2) now(tz=info)
현재 지역 시간의 datetime 인스턴스를 반환합니다. tzinfo를 지정할 수 있습니다.
>>> datetime.datetime.now()
datetime.datetime(2020, 11, 23, 14, 6, 10, 967000)
3) utcnow
UTC 시간의 datetime 인스턴스를 반환합니다. tzinfo는 None 입니다.
>>> datetime.datetime.utcnow()
datetime.datetime(2020, 11, 23, 5, 7, 44, 965000)
4) fromtimestamp(timestamp, tz=None)
유닉스 시간을 연/월/일 시간으로 바꿔줍니다. 유닉스시간은 time.time()으로 가져옵니다. tzinfo 설정이 가능합니다.
>>> time.time()
1606108188.5449998
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2020, 11, 23, 14, 9, 35, 202000)
5) utcfromtimestamp
유닉스 시간을 연/월/일 시간으로 바꿔줍니다. 유닉스시간은 time.time()으로 가져옵니다. tzinfo 는 None입니다.
>>> datetime.datetime.utcfromtimestamp(time.time())
datetime.datetime(2020, 11, 23, 5, 11, 19, 519000)
6) fromordinal(ordinal)
그래고리력 서수를 입력하면 해당 datetime 을 반환합니다.
>>> datetime.datetime.fromordinal(422506)
datetime.datetime(1157, 10, 13, 0, 0)
7) fromisoformat(data_string)
ISO8601 형식으로 입력하면 datetime 인스턴스를 반환합니다.
>>> datetime.datetime.fromisoformat('2020-03-12T05:12:30')
datetime.datetime(2020, 3, 12, 5, 12, 30)
8) fromisocalendar(year,week,day)
year,week,day 를 입력하면 datetime을 반환합니다. 여기서 day는 isoweekday입니다. 월요일이1, 일요일이 7입니다.
>>> datetime.datetime.fromisocalendar(2020,3,2)
datetime.datetime(2020, 1, 14, 0, 0)
9) strptime
입력한 문자열을 입력한 포멧에 맞게 datetime 으로 반환.
>>> datetime.datetime.strptime('2020-02-03','%Y-%m-%d')
datetime.datetime(2020, 2, 3, 0, 0)
3. 인스턴트 메서드
1) date
date 형태의 객체를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).date()
datetime.date(2020, 3, 12)
2) time
시,분,초,마이크로초,fold 로 구성된 time 객체를 반환합니다.
>>> d0atetime.datetime(2020,3,12,5,12,30).time()
datetime.time(5, 12, 30)
3) timetz
시,분,초,마이크로초,fold,tzinfo 로 구성된 time 객체를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).timetz()
datetime.time(5, 12, 30)
4) replace
데이터를 입력값으로 수정하여 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).replace(hour=10)
datetime.datetime(2020, 3, 12, 10, 12, 30)
5) astimezone
입력된 timezone 에 해당되는 datetime 객체를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).astimezone(datetime.timezone.utc)
datetime.datetime(2020, 3, 11, 20, 12, 30, tzinfo=datetime.timezone.utc)
6) utcoffset
tzinfo 가 None 이면 None 을 반환, 그렇지 않다면 self.tzinfo.utcoffset(self)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).utcoffset()
7) dst
tzinfo 가 None 이면 None 을 반환, 그렇지 않다면 self.tzinfo.dst(self)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).dst()
8) tzname
tzinfo 가 None 이면 None 을 반환, 그렇지 않다면 self.tzinfo.tzname(self)를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).tzname()
9) timetuple
struct_time 을 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).timetuple()
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=12, tm_hour=5, tm_min=12, tm_sec=30, tm_wday=3, tm_yday=72, tm_isdst=-1)
10) utctimetuple
struct_time 을 반환합니다. timetuple과의 차이는 인스턴스가 나이브하면 tm_isdst 값이 강제로 0이 된다는 것입니다.
>>> datetime.datetime(2020,3,12,5,12,30).utctimetuple()
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=12, tm_hour=5, tm_min=12, tm_sec=30, tm_wday=3, tm_yday=72, tm_isdst=0)
11) toordinal
그레고리력 서수를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).toordinal()
737496
12) timestamp
POSIX 타임스템프를 반환합니다. 유닉스 시간입니다.
>>> datetime.datetime(2020,3,12,5,12,30).timestamp()
1583957550.0
13) weekday
요일을 숫자로 반환합니다. 월요일이 0, 일요일이 6입니다.
>>> datetime.datetime(2020,3,12,5,12,30).weekday()
3
14) isoweekday
요일을 숫자로 반홥합니다. 월요일이 1, 일요일이 7입니다.
>>> datetime.datetime(2020,3,12,5,12,30).isoweekday()
4
15) isocalendar
해당 날짜의 연도, week, weekday를 알려줍니다. (유럽은 우리처럼 '11월 셋째주' 이런식이 아니라 '48번째주' 이런식으로 소통하더라구요.)
>>> datetime.datetime(2020,3,12,5,12,30).isocalendar()
(2020, 11, 4)
16) isoformat
해당 날짜를 ISO 8601형식의 날짜로 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).isoformat()
'2020-03-12T05:12:30'
17) ctime
아래와 같은 형태로 결과를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).ctime()
'Thu Mar 12 05:12:30 2020'
18) strftime
입력된 포멧에 맞게 날짜를 반환합니다.
>>> datetime.datetime(2020,3,12,5,12,30).strftime('%Y')
'2020'
19) __format__
strtime과 같은 기능.