[Python] 파이썬 날짜 시간 계산 , 날짜 및 시간 표기법 예제 및 총정리 : datetime, timedelta
datetime모듈을 import하여 날짜와 시간에 대한 계산 및 표기법을 변경할 수 있습니다. datetime의 date클래스는 날짜를 출력할때 사용합니다. datetime의 time클래스는 시간을 출력할때 사용합니다. datetime의 datetime은 날짜와 시간을 출력할때 사용합니다. float형의 timestamp값을 datetime의 자료형으로 변경하기 위해서는 fromtimestamp()함수를 사용합니다. 날짜계산과 시간계산을 위해서는 timedelta()클래스를 사용합니다. 그럼 예제 코드를 통하여 알아보아요.
■현재 날짜와 시간을 출력하기 : datetime.now()함수를 사용합니다.
import datetime
print(datetime.datetime.__doc__)
current = datetime.datetime.now()
print(current)
#실행결과
C:UsersilikeAppDataLocalProgramsPythonPython39python.exe C:/python/Workspace/main.py
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
The year, month and day arguments are required. tzinfo may be None, or an
instance of a tzinfo subclass. The remaining arguments may be ints.
2020-12-08 21:05:43.429235
■시간 뒤에 마이크로세컨드(microsecond) 값을 제외하고 싶은 경우에는 now.replace()함수를 사용합니다.
import datetime
current = datetime.datetime.now()
print(current)
current_time = current.replace(microsecond=0)
print(current_time)
#실행결과
2020-12-08 21:36:07.151710
2020-12-08 21:36:07
■timestamp()함수를 사용하여 float타입의 값을 받아 날짜와 시간으로 출력하는 방법 : fromtimestamp()함수를 사용합니다.
import datetime
timestamp = datetime.datetime.now().timestamp()
print(timestamp)
fts = datetime.datetime.fromtimestamp(timestamp)
print(fts)
#실행결과
1607490746.188708
2020-12-08 21:12:26.188708
■현재날짜만 yyyy-mm-dd 타입으로 출력하는 방법 및 현재시간만 출력하는 방법
import datetime
currentdate = datetime.datetime.now().date()
print(currentdate)
currenttime = datetime.datetime.now().time()
print(currenttime)
#실행결과
2020-12-08
21:11:24.095884
chg = datetime.datetime.strftime(current_datetime, '%b %d %y %H %H %S')
print(chg)
#실행결과
Dec 08 20 22 22 57
■날짜와 시간을 합치는 방법 : datetime.combine()함수를 사용합니다.
import datetime
currentdate = datetime.datetime.now().date()
print(currentdate)
currenttime = datetime.datetime.now().time()
print(currenttime)
combine_datetime = datetime.datetime.combine(currentdate, currenttime)
print(combine_datetime)
#실행결과
2020-12-08
21:15:42.071281
2020-12-08 21:15:42.071281
■yyyy-MM-dd HH:mm:ss 타입으로 출력하는 방법
import datetime
current_datetime = datetime.datetime.now()
print(current_datetime)
dateformat = "%Y-%m-%d %H:%M:%S"
tmp = current_datetime.strftime(dateformat)
print(tmp)
#실행결과
2020-12-08 21:23:51.487159
2020-12-08 21:23:51
■문자열(str)을 datetime으로 변경하는 방법 : strptime()함수를 사용하여 datetime형으로 변경합니다.
반대로 datetime형을 문자열로 변경할때는 strftime()함수를 사용합니다.
import datetime
current_datetime = datetime.datetime.now()
print(current_datetime)
dateformat = "%Y-%m-%d %H:%M:%S"
tmp = current_datetime.strftime(dateformat)
print(tmp)
print(type(tmp))
print('-'*40)
datetime_convert = datetime.datetime.strptime(tmp, dateformat)
print(datetime_convert)
print(type(datetime_convert))
print('-'*40)
str_datetime = "2020-12-08 21:29:07"
datetime_convert2 = datetime.datetime.strptime(str_datetime, dateformat)
print(datetime_convert2)
print(type(datetime_convert2))
#실행결과
2020-12-08 21:30:54.253993
2020-12-08 21:30:54
<class 'str'>
----------------------------------------
2020-12-08 21:30:54
<class 'datetime.datetime'>
----------------------------------------
2020-12-08 21:29:07
<class 'datetime.datetime'>
■오늘을 기준으로 이전날짜와 다음날짜 가져오기 : timedelta()함수를 사용하여 날짜 계산 기준을 정합니다.
import datetime
current_time = datetime.datetime.now()
print("today -> ",current_time)
base_day = datetime.timedelta(days=1)
print(base_day)
previous_day = current_time - base_day
print("이전날짜 -> ", previous_day)
next_day = current_time + base_day
print("다음날짜 -> ", next_day)
#실행결과
today -> 2020-12-08 21:45:14.184384
1 day, 0:00:00
이전날짜 -> 2020-12-07 21:45:14.184384
다음날짜 -> 2020-12-09 21:45:14.184384
■특정 날짜로 부터 시간 계산방법
import datetime
current_time = datetime.datetime.now()
print("today -> ", current_time)
print("오늘 현재시간 기준으로 3일 뒤 날짜 -> ", (current_time + datetime.timedelta(days=3)))
print("오늘 현재시간 기준으로 3일 전 날짜 -> ", (current_time + datetime.timedelta(days=-3)))
print("오늘 현재시간 기준으로 1일 뒤 3시간 이후 날짜 -> ", (current_time + datetime.timedelta(days=1, hours=3)))
#실행결과
today -> 2020-12-08 22:04:37.808202
오늘 현재시간 기준으로 3일 뒤 날짜 -> 2020-12-11 22:04:37.808202
오늘 현재시간 기준으로 3일 전 날짜 -> 2020-12-05 22:04:37.808202
오늘 현재시간 기준으로 1일 뒤 3시간 이후 날짜 -> 2020-12-10 01:04:37.808202
■두 날짜의 차이 계산하는 방법 : 일 단위(days), 초 단위(seconds), 분 단위, 시간 단위로 계산할 수 있습니다.
import datetime
dateformat = "%Y-%m-%d %H:%M:%S"
start_datetime = "2020-12-06 21:29:07"
end_datetime = "2020-12-08 21:19:02"
print("문자열을 datetime 자료형으로 형변환")
datetime_convert1 = datetime.datetime.strptime(start_datetime, dateformat)
datetime_convert2 = datetime.datetime.strptime(end_datetime, dateformat)
print("일 단위 -> ", (datetime_convert2 - datetime_convert1).days)
print("시간 단위 -> ", (datetime_convert2 - datetime_convert1).seconds / 3600)
print("분 단위 -> ", (datetime_convert2 - datetime_convert1).seconds / 60)
print("초단위 -> ", (datetime_convert2 - datetime_convert1).seconds)
#실행결과
문자열을 datetime 자료형으로 형변환
일 단위 -> 1
시간 단위 -> 23.831944444444446
분 단위 -> 1429.9166666666667
초단위 -> 85795
■년,월,일,시,분,초,마이크로초를 날짜로 출력하기
import datetime
time_linked = datetime.datetime(2020, 1, 1, 1, 1, 1, 100)
print(time_linked)
#실행결과
2020-01-01 01:01:01.000100
■현재 년월일, 현재 일자와 시간, 날짜, 시간 표기법
import datetime
# 현재 년월일
print("타입 : ", type(datetime.date.today()), "현재 년월일 : ", datetime.date.today())
# 현재 일자와 시간
print("타입 : ", type(datetime.datetime.now()), "현재 일자와 시간 : ", datetime.datetime.now())
# 날짜 타입 할당
print("타입 : ", type(datetime.date(2020, 12, 25)), "날짜 타입 : ", datetime.date(2020, 12, 25))
# 시간 타입 할당
NewTime = datetime.time(12, 30, 40)
print("타입 : ", type(datetime.time(7, 20, 5)), "날짜 타입 : ", (datetime.time(7, 20, 5)))
#실행결과
타입 : <class 'datetime.date'> 현재 년월일 : 2020-12-08
타입 : <class 'datetime.datetime'> 현재 일자와 시간 : 2020-12-08 22:29:08.044205
타입 : <class 'datetime.date'> 날짜 타입 : 2020-12-25
타입 : <class 'datetime.time'> 날짜 타입 : 07:20:05
■ 날짜를 한글로 표기하는 방법
import datetime
current_datetime = datetime.datetime.now()
print(current_datetime)
chg = datetime.datetime.strftime(current_datetime, "%Y년 %m월 %d일")
print(chg)
chg2 = datetime.datetime.strftime(current_datetime, "%Y년 %m월 %d일 %a")
print(chg2)
chg2 = datetime.datetime.strftime(current_datetime, "%Y년 %m월 %d일 %A")
print(chg2)
#실행결과
2020-12-08 22:47:17.687803
2020년 12월 08일
2020년 12월 08일 Tue
2020년 12월 08일 Tuesday
[REFERENCE]
docs.python.org/3/library/datetime.html?highlight=datetime#datetime.datetime
docs.python.org/3/library/datetime.html?highlight=datetime#module-datetime
docs.python.org/3/library/datetime.html?highlight=timedelta#datetime.timedelta
[파이썬 더 알아보기]
[프로그래밍/Python] – [Python] 파이썬 소수점 반올림, 돈 표기 방법 : 천단위 콤마(쉼표) 찍기( 천단위 구분 기호 추가), 숫자 콤마 제거
[프로그래밍/Python] – [Python] 파이썬 self를 인자로 받는 함수(Method)와 그렇지 않은 함수(메소드)의 차이점
[프로그래밍/Python] – [Python] 파이썬 list, tuple, dictionary,set 예제 및 총정리
[프로그래밍/Python] – [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리