Python datetime 사용법
datetime모듈내의 클래스
클래스 | 내용 |
datetime.date | 일반적으로 사용되는 그레고리안 달력(Gregorian Calendar)의 년, 월, 일을 나타냄 |
datetime.time | 시간을 시, 분, 초, 마이크로초, 시간대(Time zone)로 나타냄 |
datetime.datetime | date클래스와 time클래스의 조합으로 년, 월, 일, 시, 분, 초, 마이크로초, 시간대 정보를 나타냄 |
datetime.timedelta | 두 날짜 혹은 시간 사이의 기간을 표현 |
datetime.date 클래스
datetime.date클래스는 일반적으로 사용되는 년, 월, 일로 표기되는 그레고리안 달력의 날짜를 표현함
생성자 : datetime.date(year, month, day)
숫자로 년, 월, 일을 입력받아서 date객체를 생성
- year : 1 ~ 9999
- month : 1 ~ 12
- day : 1 ~ 해당월의 마지막 날짜
>>> import datetime
>>> D=datetime.date(2013,2,18)
>>> D
datetime.date(2013, 2, 18)
>>> print(D)
2013-02-18
>>> D=datetime.date(2013,2,31) #해당월의 최대일수를 넘으면 ValueError발생
Traceback (most recent call last):
File "<pyshell#194>", line 1, in <module>
D=datetime.date(2013,2,31)
ValueError: day is out of range for month
datetime.date클래스 속성
속성 | 내용 |
year | 년(읽기전용) |
month | 월(읽기전용) |
day | 일(읽기전용) |
max | date객체의 최댓값 (9999,12,31) |
min | date객체의 최솟값 (1,1,1) |
>>> import datetime
>>> D=datetime.date(2013,2,18)
>>> D.year #년
2013
>>> D.month #월
2
>>> D.day #일
18
>>> D.max #date객체의 최댓값
datetime.date(9999, 12, 31)
>>> D.min #date객체의 최솟값
datetime.date(1, 1, 1)
today()
현재 시스템의 오늘 날짜 date객체를 반환
>>> import datetime
>>> datetime.date.today()
datetime.date(2013, 3, 29)
replace(year, month, day)
입력된 인자로 변경된 date객체를 반환, 원본객체는 변경되지 않음
변경하려는 속성만 명시적으로 전달할수 있음
>>> import datetime
>>> a=datetime.date.today()
>>> a
datetime.date(2013, 3, 29)
>>> b=a.replace(day=1) #a객체에서 day만 변경
>>> a
datetime.date(2013, 3, 29) #원본은 변경되지 않음
>>> b
datetime.date(2013, 3, 1)
weekday()
요일을 정수로 변환하여 반환
월:0, 화:1, 수:2, 목:3, 금:4, 토:5, 일:6
>>> import datetime
>>> a=datetime.date.today()
>>> a.weekday()
4
isoformat()
date객체의 정보를 "YYYY-MM-DD"형태의 문자열로 반환
>>> import datetime
>>> D=datetime.date.today()
>>> D.isoformat()
'2013-03-29'
strftime(format)
지정된 포맷에 맞춰 datetime.date객체의 정보를 문자열로 반환
지시자 | 내용 |
%y | 연도를 축약하여 표시('13') |
%Y | 연도를 축약하지 않고 표시('2013') |
%b | 축약된 월이름('Mar') |
%B | 축약되지 않은 월 이름('March') |
%m | 숫자로 표현한 월(01~12) |
%d | 일(01~31) |
%H | 24시를 기준 시(00~23) |
%I(아이) | 12시를 기준 시(01~12) |
%M | 분(00~59) |
%S | 초(00~61) |
%p | 오전(AM)/오후(PM) 표시 ('AM') |
%a | 축약된 요일 이름('Fri') |
%A | 축약되지 않은 요일이름('Friday') |
%w | 요일을 숫자로 표시 (일:0, 월:1, 화:2, 수:3, 목:4, 금:5, 토:6) |
%j | 1월 1일부터 누적된 날짜(001~366) |
microsecond = %f
time모듈의 strftime메서드와 형식지시자가 같음
>>> import datetime
>>> D=datetime.date(2013,2,18)
>>> D.strftime('%Y %m %d')
'2013 02 18'
>>> D.strftime('%y/%m/%d %H:%M:%S') #시, 분, 초에 대한 정보는 없기때문에 '0'으로 반환됨
'13/02/18 00:00:00'
datetime.time클래스
time클래스는 시, 분, 초와 같은 시간을 표현함
생성자 : datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
숫자로 시, 분, 초, 마이크로초, 시간대정보(Time Zone)을 입력받아서 time객체를 생성하며, 각 인자는 생략하거나 명시적으로 지정할수 있다.
- hour : 0 ~ 23
- minute : 0 ~ 59
- second : 0 ~ 59
- microsecond : 0 ~ 999999
>>> import datetime
>>> datetime.time(23) #시간만 입력
datetime.time(23, 0)
>>> datetime.time(23,15,45,2341) #시, 분, 초 마이크로초 입력
datetime.time(23, 15, 45, 2341)
>>> datetime.time(hour=23,second=5) #인자지정하여 입력
datetime.time(23, 0, 5)
>>> datetime.time(25) #인자허용값을 벗어난경우
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
time(25)
ValueError: hour must be in 0..23
datetime.time클래스 속성
속성 | 내용 |
hour | 시(읽기전용) |
minute | 분(읽기전용) |
second | 초(읽기전용) |
microsecond | 마이크로초(읽기전용) |
max | time객체가 표현할수 있는 최댓값 (0,0,0,0) |
min | time객체가 표현할수 있는 최솟값 (23,59,59,999999) |
>>> import datetime
>>> T=datetime.time(23,30,15,2904)
>>> T.hour #시
23
>>> T.minute #분
30
>>> T.second #초
15
>>> T.microsecond #마이크로초
2904
>>> T.max #time객체의 최댓값
datetime.time(23, 59, 59, 999999)
>>> T.min #time객체의 최솟값
datetime.time(0, 0)
isoformat()
time객체의 값을 "HH:MM:SS.mmmmmm'형식이나
'HH:MM:SS'형식(micro초가 없는경우)의 문자열을 반환
>>> import datetime
>>> T=datetime.time(23,30,15,3759)
>>> T.isoformat()
'23:30:15.003759'
strftime(format)
지정된 포맷에 맞춰 datetime.time객체의 정보를 문자열로 반환
지시자 | 내용 |
%y | 연도를 축약하여 표시('13') |
%Y | 연도를 축약하지 않고 표시('2013') |
%b | 축약된 월이름('Mar') |
%B | 축약되지 않은 월 이름('March') |
%m | 숫자로 표현한 월(01~12) |
%d | 일(01~31) |
%H | 24시를 기준 시(00~23) |
%I(아이) | 12시를 기준 시(01~12) |
%M | 분(00~59) |
%S | 초(00~61) |
%p | 오전(AM)/오후(PM) 표시 ('AM') |
%a | 축약된 요일 이름('Fri') |
%A | 축약되지 않은 요일이름('Friday') |
%w | 요일을 숫자로 표시 (일:0, 월:1, 화:2, 수:3, 목:4, 금:5, 토:6) |
%j | 1월 1일부터 누적된 날짜(001~366) |
time모듈의 strftime메서드와 형식지시자가 같음
>>> import datetime
>>> T=datetime.time(23,30,15,3759)
>>> T.strftime('%Y %m %d %H:%M:%S:')
'1900 01 01 23:30:15:'
datetime.datetime 클래스
datetime클래스는 date클래스와 time클래스의 조합으로 이루어져 있다.
생성자 : datetime.datetime(yesr, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])
숫자로 각 인자를 받아서 datetime객체를 생성하며, 년, 월, 일은 생략이 불가하다.
명시적으로 인자를 지정하여 입력할수 있고, 생략된 인자는 0으로 초기화된다.
- year : 1 ~ 9999
- month : 1 ~ 12
- day : 1 ~ 해당월의 마지막 날짜
- hour : 0 ~ 23
- minute : 0 ~ 59
- second : 0 ~ 59
- microsecond : 0 ~ 999999
>>> import datetime
>>> datetime.datetime(2013,2,18) #년, 월, 일만 입력
datetime.datetime(2013, 2, 18, 0, 0)
>>> datetime.datetime(2013,2,hour=23,second=30,day=18) #명시적으로 인자를 지정
datetime.datetime(2013, 2, 18, 23, 0, 30)
>>> datetime.datetime(2013) #월,일인자가 생략되어 Error발생
Traceback (most recent call last):
File "<pyshell#89>", line 1, in <module>
datetime(2013)
TypeError: Required argument 'month' (pos 2) not found
datetime.datetime클래스 속성
속성 | 내용 |
year | 년(읽기전용) |
month | 월(읽기전용) |
day | 일(읽기전용) |
hour | 시(읽기전용) |
minute | 분(읽기전용) |
second | 초(읽기전용) |
microsecond | 마이크로초(읽기전용) |
max | datetime객체가 표현할수 있는 최댓값 (9999,12,31,23,59,59,999999) |
min | datetime객체가 표현할수 있는 최솟값 (1,1,1) |
datetime.datetime객체를 생성하는 클래스메서드
>today()
현재 LST 기준의datatime객체를 생성
>>> import datetime
>>> datetime.datetime.today()
datetime.datetime(2013, 3, 29, 4, 30, 17, 967000)
now([tz])
현재 LST기준의 datetime객체를 생성
시간대 정보가 입력되지 않으면 플랫폼의 시간대를 그대로 사용
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2013, 3, 29, 4, 33, 3, 498000)
utcnow()
UTC기준의datetime객체를 생성
>>> import datetime
>>> datetime.datetime.utcnow()
datetime.datetime(2013, 3, 28, 19, 36, 38, 170000)
fromtimestamp(timestamp[,tz])
타임스탬프를 지방 기준의 datetime객체를 생성
>>> import datetime,time
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2013, 3, 29, 4, 43, 48, 201000)
utcfromtimestamp(timestamp)
타임스탬프를 UTC기준의 datetime객체를 생성
>>> import datetime,time
>>> datetime.datetime.utcfromtimestamp(time.time())
datetime.datetime(2013, 3, 28, 19, 44, 46, 358000)
strptime(date_string,format)
시간을 표현한 사용자가 정의한 형식문자열을 이용하여 datetime객체를 생성
지시자 | 내용 |
%y | 연도를 축약하여 표시('13') |
%Y | 연도를 축약하지 않고 표시('2013') |
%b | 축약된 월이름('Mar') |
%B | 축약되지 않은 월 이름('March') |
%m | 숫자로 표현한 월(01~12) |
%d | 일(01~31) |
%H | 24시를 기준 시(00~23) |
%I(아이) | 12시를 기준 시(01~12) |
%M | 분(00~59) |
%S | 초(00~61) |
%p | 오전(AM)/오후(PM) 표시 ('AM') |
%a | 축약된 요일 이름('Fri') |
%A | 축약되지 않은 요일이름('Friday') |
%w | 요일을 숫자로 표시 (일:0, 월:1, 화:2, 수:3, 목:4, 금:5, 토:6) |
%j | 1월 1일부터 누적된 날짜(001~366) |
time모듈의 strftime메서드와 형식지시자가 같음
>>> import datetime,time
>>> timestring=time.ctime(1234567890)
>>> timestring
'Sat Feb 14 08:31:30 2009'
>>> datetime.datetime.strptime(timestring,"%a %b %d %H:%M:%S %Y")
datetime.datetime(2009, 2, 14, 8, 31, 30)
date()
원본객체의 년, 월, 일 정보를 가지고 있는 date객체를 반환
>>> import datetime
>>> DT=datetime.datetime(2013,2,18,22,30,15)
>>> D=DT.date()
>>> D
datetime.date(2013, 2, 18)
time()
원본객체의 시, 분, 초, 마이크로초를 가지고 있는 time객체를 반환
>>> import datetime
>>> DT=datetime.datetime(2013,2,18,22,30,15)
>>> T=DT.time()
>>> T
datetime.time(22, 30, 15)
replace()
입력된 값으로 변경된 datetime객체를 반환, 원본객체는 변경되지 않음
>>> import datetime
>>> DT=datetime.datetime(2013,2,18,22,30,15)
>>> DT_1=DT.replace(year=1987)
>>> DT
datetime.datetime(2013, 2, 18, 22, 30, 15)
>>> DT_1
datetime.datetime(1987, 2, 18, 22, 30, 15)
isoformat()
datetime객체를 'YYYY-MM-DDTHH:MM:SS.mmmmmm'형식으로 변환하여 문자열로 반환
마이크로초가 0인경우 '.mmmmmm'부분은 생략됨
>>> import datetime
>>> DT=datetime.datetime.today()
>>> DT.isoformat()
'2013-03-29T07:57:58.014000'
>>> DT.replace(microsecond=0).isoformat() #마이크로초가 0인경우
'2013-03-29T07:57:58'
strftime(format)
지정된 포맷형식에 맞추어 datetime.datetime객체를 문자열로 반환
지시자 | 내용 |
%y | 연도를 축약하여 표시('13') |
%Y | 연도를 축약하지 않고 표시('2013') |
%b | 축약된 월이름('Mar') |
%B | 축약되지 않은 월 이름('March') |
%m | 숫자로 표현한 월(01~12) |
%d | 일(01~31) |
%H | 24시를 기준 시(00~23) |
%I(아이) | 12시를 기준 시(01~12) |
%M | 분(00~59) |
%S | 초(00~61) |
%p | 오전(AM)/오후(PM) 표시 ('AM') |
%a | 축약된 요일 이름('Fri') |
%A | 축약되지 않은 요일이름('Friday') |
%w | 요일을 숫자로 표시 (일:0, 월:1, 화:2, 수:3, 목:4, 금:5, 토:6) |
%j | 1월 1일부터 누적된 날짜(001~366) |
time모듈의 strftime메서드와 형식지시자가 같음
>>> import datetime
>>> DT=datetime.datetime.today()
>>> DT.strftime('%Y-%m-%d %H:%M:%S %a')
'2013-03-29 08:04:55 Fri'
datetime.timedelta
datetime.timedelta클래스는 두 날짜 혹은 시간 사이의 기간을 표현한다.
인자는 양수인경우 현시점으로부터 이후를 나타내며, 음수인경우 현시점 이전을 나타낸다.
생성자 : datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]])
>>> import datetime
>>> datetime.timedelta(days=-3) #3일 이전
datetime.timedelta(-3)
>>> datetime.timedelta(hours=7) #7시간 이후
datetime.timedelta(0, 25200)
>>> datetime.timedelta(weeks=2,days=3,hours=-3,minutes=30)
datetime.timedelta(16, 77400)
>>> datetime.timedelta(minutes=3,milliseconds=-20,microseconds=400)
datetime.timedelta(0, 179, 980400)
생성되는 timedelta객체의 값을 확인해보면 생성자에 전달된 값과 다른것을 알수 있다.
그 이유는 동일한 기간을 표현하는 방식이 다양하게 표현(1weeks와 7days는 동일함)될수 있기 대문에, 입력된 값을 가지고 timedelta객체에서 정규화과정을 거쳐 유일한 표현방식으로 변경하기 때문이다.
정규화 결과 timedelta객체 저장되는 값은 아래와 같다.
- days : -999999999 ~ 999999999
- seconds : 0 ~ 86399(24시간을 초로 환산하면 86400초)
- microseconds : 0 ~ 999999
그렇기 때문에 timedelta객체를 이용하여 표현할수 있는 가장 작은 값으 정규화과정을 거치면 아래와 같다.
>>> datetime.timedelta(microseconds=-1) #현재 이전으로 가장 작은값
datetime.timedelta(-1, 86399, 999999)
>>> datetime.timedelta(microseconds=1) #현재 이후로 가장 작은값
datetime.timedelta(0, 0, 1)
시간, 날짜의 연산
생성된 timedelta클래스객체를 이용하여 아래의 연산을 수행할수 있다.
연산결과로는 모두 timedelta객체가 반환된다.
- timedelta_3 = timedelta_1 + timedelta_2
- timedelta_3 = timedelta_1 - timedelta_2
- timedelta_3 = timedelta_1 * int = int * timedelta_1
- timedelta_2 = timedelta_1 // int
- abs(timedelta)
>>> from datetime import timedelta
>>> td_1 = timedelta(hours=7) #현재로부터 7시간 이후
>>> td_2 = timedelta(days=-3) #현재로부터 3일 이전
>>> td_1 + td_2 #두 timedelta의 합
datetime.timedelta(-3, 25200) #7시간 = 25200초
>>> td_1 - td_2 #두 timedelta의 차
datetime.timedelta(3, 25200)
>>> td_1 * 4 #timedelta와 정수의 곱
datetime.timedelta(1, 14400) #28시간 = 1일4시간 = 1일14400초
>>> td_1 // 3 #25200초 // 3
datetime.timedelta(0, 8400)
>>> abs(td_2) #기간의 절대값
datetime.timedelta(3)
비교 연산
>>> from datetime import timedelta
>>> td_1 = timedelta(hours=7)
>>> td_2 = timedelta(days=-3)
>>> td_1 > td_2
True
>>> td_1 < td_2
False
>>> td_1 = timedelta(hours=24) #24시간 = 86400초
>>> td_2 = timedelta(seconds=86400)
>>> td_1 == td_2
True
생성된 timedelta객체를 이용하여 date, datetime객체를 변경할수 있다. 지원하는 연산은 아래와 같으며, 각 객체간의 비교연산도 가능하다.
- date_2 = date_1 + timedelta
- date_2 = date_1 - timedelta
- timedelta = date_2 - date_1
- datetime_2 = datetime_1 + timedelta
- datetime_2 = datetime_1 - timedelta
- timedelta = datetime_1 - datetime_2
>>> from datetime import timedelta, date
>>> d = date.today()
>>> d
datetime.date(2013, 3, 29)
>>> td=timedelta(days=3) #timedelta를 3일로 설정
>>> d + td #오늘로부터 3일 후
datetime.date(2013, 4, 1)
>>> d - td #오늘로부터 3일 전
datetime.date(2013, 3, 26)
두 date객체 사이의 기간(timedelta)을 구하기 위해서는 아래와 같이 '-'연산으로 측정가능하며, date객체간의 비교연산도 가능하다.
>>> from datetime import timedelta, date
>>> d = date.today()
>>> d2 = d.replace(day=20)
>>> d2
datetime.date(2013, 3, 20)
>>> dt = d - d2
>>> dt
datetime.timedelta(9)
>>> d2 > d
False
아래는datetime객체와 관련된 연산의 예제이다
date객체가 지원하는 모든연산이 가능하다.
>>> import datetime
>>> dt=datetime.datetime.today()
>>> dt
datetime.datetime(2013, 4, 1, 23, 41, 52, 154000)
>>> td=datetime.timedelta(days=2,hours=2) #2일 2시간
>>> dt + td #datetime객체에서 timedelta(2일 2시간)을 더함
datetime.datetime(2013, 4, 4, 1, 41, 52, 154000)
>>> dt - td #datetime객체에서 timedelta(2일 2시간)을 뺌
datetime.datetime(2013, 3, 30, 21, 41, 52, 154000)
>>> dt2 = dt.replace(month=1, day=4, hour=7) #dt 객체의 값중 월, 일, 시간을 변경
>>> dt2
datetime.datetime(2013, 1, 4, 7, 41, 52, 154000)
>>> dt- dt2 #datetime객체간의 기간
datetime.timedelta(87, 57600)
>>> dt > dt2 #비교연산
True
참고
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dudwo567890&logNo=130165166038
'DevOps > Python' 카테고리의 다른 글
[Python] 문자열 치환 replace / translate (0) | 2021.12.31 |
---|---|
[python] too many values to unpack 해결 (0) | 2021.12.31 |
python flask 환경에서 sql query를 in 조건으로 검색 (0) | 2021.12.10 |
Python datetime 어제, 달의 첫번째 일, 달의 마지막 일 (0) | 2021.07.06 |
Python으로 Jira Page 생성하기 (0) | 2021.06.09 |