티스토리 뷰

Python

Python,module datetime [날짜시간]

hwangyoungjae 2016. 5. 17. 13:54
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

-. 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 ~ 해당월의 마지막 날짜

ex) 객체생성

>>> 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)

ex)

>>> 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)

 

-. datetime.date객체를 반환하는 클래스메서드

>fromtimestamp(timestamp)

타임스탬프값을 인자로 받아서 date객체를 반환

>>> import datetime,time

>>> datetime.date.fromtimestamp(time.time())

datetime.date(2013, 3, 29)

 

>fromordinal(ordinal)

1 1 1일 이후로 누적된 날짜로부터 date객체를 반환

>>> import datetime

>>> datetime.date.fromordinal(100)

datetime.date(1, 4, 10)

 

> today()

현재 시스템의 오늘 날짜 date객체를 반환

>>> import datetime

>>> datetime.date.today()

datetime.date(2013, 3, 29)

 

-. datetime.date객체를 이용하여 다른 값/형식으로 반환하는 메서드

>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)

 

>timetuple()

date객체의 값을 struct_time시퀸스객체로 반환

>>> import datetime

>>> a=datetime.date.today()

>>> a.timetuple()

time.struct_time(tm_year=2013, tm_mon=3, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=88, tm_isdst=-1)

 

>toordinal()

1 1 1일 이후로 date객체까지 누적된 날자를 반환

>>> import datetime

>>> a=datetime.date.today()

>>> a.toordinal()

734956

 

>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'

 

>ctime()

date객체의 정보를 'Sun Mar 15 00:00:00 2009'형태의 문자열로 반환

초에 대한 정보는 '0'으로 초기화 됨

>>> import datetime

>>> D=datetime.date.today()

>>> D.ctime()

'Fri Mar 29 00:00:00 2013'

 

>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

ex) 객체생성

>>> 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)

ex)

>>> 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)

 

-. datetime.time클래스가 지원하는 메서드

>replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])

입력된 인자로 변경된 time객체를 반환원본객체는 변경되지 않음

변경하려는 속성만 명시적으로 전달할수 있음

>>> import datetime

>>> T=datetime.time(23,30,15,3759)

>>> T1=T.replace(microsecond=0)

>>> T,T1

(datetime.time(23, 30, 15, 3759), datetime.time(23, 30, 15))

 

>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

ex) 객체생성

>>> 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)

 

>fromordinal(ordinal)

1 1 1일 이후로 누적된 날짜로부터 datetime객체를 생성

시간관련 값은 0으로 할당됨

>>> import datetime

>>> datetime.datetime.fromordinal(1000)

datetime.datetime(3, 9, 27, 0, 0)

 

>combine(date,time)

date객체와 time객체를 입력받아서 datetime객체를 생성

>>> import datetime

>>> D=datetime.date(2013,2,18)

>>> T=datetime.time(23,30,15)

>>> D

datetime.date(2013, 2, 18)

>>> T

datetime.time(23, 30, 15)

>>> DT=datetime.datetime.combine(D,T)

>>> DT

datetime.datetime(2013, 2, 18, 23, 30, 15)

 

>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)

 

-. datetime.datetime객체를 이용하여 다른 값/형식으로 반환하는 메서드

>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)

 

>timetuple()

datetime객체의 값을 time.struct_time형식의 시퀸스객체로 변환하여 반환

>>> import datetime

>>> DT=datetime.datetime(2013,2,18,22,30,15)

>>> DT.timetuple()

time.struct_time(tm_year=2013, tm_mon=2, tm_mday=18, tm_hour=22, tm_min=30, tm_sec=15, tm_wday=0, tm_yday=49, tm_isdst=-1)

 

>weekday()

요일을 정수로 변환하여 반환

:0, :1, :2, :3, :4, :5, :6

>>> import datetime

>>> DT=datetime.datetime.today()

>>> DT.weekday()

4

 

>isoweekday()

ISO형식에 맞도록 요일을 정수 변환하여 반환

:1, :2, :3, :4, :5, :6, :0

>>> import datetime

>>> DT=datetime.datetime.today()

>>> DT.isoweekday()

5

 

>isocalendar()

ISO형식에 맞는 날짜표현(ISO year, ISO week number, ISO weekday)을 튜플로 반환

>>> import datetime

>>> DT=datetime.datetime.today()

>>> DT.isocalendar()

(2013, 13, 5)

 

>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'

 

>ctime()

datetime객체의 정보를 'Sun Mar 15 00:00:00 2009'형태의 문자열로 반환

>>> import datetime

>>> DT=datetime.datetime.today()

>>> DT.ctime()

'Fri Mar 29 07:57:58 2013'

 

>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]]]]]]]])

ex) 객체생성

>>> 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)

아래는 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시간 = 14시간 = 114400

>>> 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

아래는 date객체와 관련된 연산의 예제이다.

>>> 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

 

 

참조 : 빠르게 활용하는 파이썬프로그래밍

 

'Python' 카테고리의 다른 글

Python,module fractions [분수]  (0) 2016.05.19
Python,module math [수학]  (0) 2016.05.17
Python,module time [시간]  (0) 2016.05.17
Python, pickle  (0) 2016.05.17
Python, 모듈 사용하기  (0) 2016.05.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함