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-DDT HH: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
Python,module datetime [날짜시간]
-. datetime모듈내의 클래스 클래스 내용 datetime.date 일반적으로 사용되는 그레고리안 달력(Gregorian ...
blog.naver.com