PYTHON

파이썬 날짜 함수

Positive_Monster 2022. 4. 15. 17:40
더보기

▣ 주요 키워드

  1.  날짜 함수
    • datetime 라이브러리
    • time 라이브러리
    • calendar 라이브러리
    • dateutil 라이브러리

★ 날짜 함수

●datetime 

  ▶ datetime라이브러리의 date클래스

▶ 날짜 함수
import datetime

# 현재 날짜
datetime.date.today()
datetime.datetime.now()

# date클래스 현재 날짜 (년, 월, 일 )
datetime.date.today().year
datetime.date.today().month
datetime.date.today().day
datetime.date.today().hour # date클래스에서는 hour, minute, second 없다

date클래스

   ▶ datetime라이블리의 datetime클래스

# datetime클래스 현재 날짜 (년, 월, 일, 시, 분, 초, 마이크로 초)
datetime.datetime.now().year
datetime.datetime.now().month
datetime.datetime.now().day
datetime.datetime.now().hour
datetime.datetime.now().minute
datetime.datetime.now().second
datetime.datetime.now().microsecond
datetime.datetime.now().date() # 날짜만
datetime.datetime.now().time() # 시간만
datetime.datetime.now().weekday() #  요일  0:월 ~ 6:일
type(datetime.datetime.now().weekday()) # int 타입

※ 요일은 수치형으로 나오기 때문에 따로 한글로 바꾸는 작업이 필요하다. 
1.
def date_trans(arg):
      if arg == 0:
        print('월')
      elif arg == 1:
          print('화')
      elif arg == 2:
          print('수')
      elif arg == 3:
          print('목')
      elif arg == 4:
          print('금')
      elif arg == 5:
          print('토')
      else:
          print('일')

date_trans(datetime.datetime.now().weekday())

2.
def date_trans2(arg):
    day = ['월','화','수','목','금','토','일']
    return day[arg]
date_trans(datetime.datetime.now().weekday())

 

   ▶ strftime

- date형식을 char형식으로 변환하는 함수(date -> char)

d = datetime.datetime.now()
d.strftime('%x') # 년/월/일
d.strftime('%X') # 시:분:초
d.strftime('%Y') # 년도(4자리)
d.strftime('%y') # 년도(뒤 2자리)
d.strftime('%m') # 달(2자리)
d.strftime('%m') + 100 # 연산작업 불가
d.strftime('%d') # 일
d.strftime('%B') # 영문자 달
d.strftime('%b') # 영문자 달(약어)
d.strftime('%H') # 시(24시간 기준)
d.strftime('%I') # 시(12시간 기준)
d.strftime('%p') # am, pm 확인
d.strftime('%I %p') # 12시간 기준일 때 am, pm 확인하기
d.strftime('%M') # 분
d.strftime('%S') # 초
d.strftime('%A') # 영문자 요일
d.strftime('%a') # 영문자 요일(약어)
d.strftime('%c') # '영문자 요일(약어) 영문자 달(약어) 일 시:분:초 년' 형식
d.strftime('%j') # 누적 날짜 (그해 1월1일부터 시작해서 그 날짜 까지)
d.strftime('%w') # 요일 0:일 ~ 6:토 str형식
d.strftime('%U') # 누적 주(일요일 시작)
d.strftime('%W') # 누적 주(월요일 시작)

   ▶ strptime

- char형을 date형식으로 변환하는 함수(char -> date)

# char형을 date형으로 변환
datetime.datetime.strptime('2022-04-10 21:56:30','%Y-%m-%d %H:%M:%S')
datetime.datetime(2022,4,10,21,58,30)

   ▶ datetime.datetime.combine(결합할 변수 1, 결합할 변수 2)

- combine함수는 연월일, 시분초처럼 따로 날짜를 구했을 때 결합시켜주는 함수

d = datetime.date(2022,3,10)
t = datetime.time(13,43,30)
datetime.datetime.combine(d,t) 
datetime.datetime.combine(d,t).year
datetime.datetime.combine(d,t).strftime('%Y')

   ▶ 날짜 연산

datetime.date(2021,12,16) - datetime.date(2022,4,10)
datetime.date(2022,4,10) - datetime.date(2021,12,16) # 최근날짜에서 전 날짜를 빼야 -가 나오지 않음
(datetime.date(2022,4,10) - datetime.date(2021,12,16)).days # 일수만 추출

    # datetime.timedelta(days=일) 함수를 이용하여 원하는 일,시,분,초,주 수를 연산작업할 수 있다.(년, 월은 안 됨)
datetime.date(2022,4,11) - datetime.timedelta(days=100)
datetime.datetime(2022,4,10,12,30,30) - datetime.timedelta(hours=5)
datetime.datetime(2022,4,10,12,30,30) - datetime.timedelta(minutes=400)
datetime.datetime(2022,4,10,12,30,30) - datetime.timedelta(seconds=10000)
datetime.datetime(2022,4,11,12,30,30) - datetime.timedelta(weeks=300)

● time 라이브러리

# time() 함수
# 1970년도 1월 1일 0시0분0초를 기준으지로 난 시간을 초단위로 리턴해주는 기능
time.time() #  UTC(Universal Time Coordinated 협정 세계 표준시) 현재시간을 실수 형태로 리턴

# localtime() 함수
# 현재 년, 월, 일, 시, 분, 초, 요일, 누적 일수, 서머타임check 출력
time.localtime() 
time.localtime(time.time()) #실수로 나타내는 time.time()을 인수로 받아서  현재 년, 월, 일, 시, 분, 초, 요일, 누적 일수, 서머타임check 출력

time.localtime().tm_year # 년 int형
time.localtime().tm_mon # 월
time.localtime().tm_mday # 일
time.localtime().tm_hour # 시
time.localtime().tm_min # 분
time.localtime().tm_sec # 초
time.localtime().tm_wday # 요일 0:월 ~ 6:일
time.localtime().tm_yday # 누적일수
time.localtime().tm_isdst # 서머타임일 경우 1, 아닐경우 0, 모를 때는 -1

time.gmtime() #UTC 기준으로 현재시간
time.asctime() # Mon Apr 11 00:30:30 2022 형식(요일, 월, 일 시:분:초 년도)
time.ctime() # asctime()과 동일 차이점은 ctime은 항상 현재 시간만을 리턴함

   ▶ time 라이브러리의 날짜, 문자, 실수 변환

#날짜 형식을 문자로 변환
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())

#문자 형식을 날짜 형식으로 변환
time.strptime('2022-4-10 10:10:10','%Y-%m-%d %H:%M:%S')

# 날짜를 실수형으로 변환
time.mktime(time.localtime())

※ 코드 실행 후 끝나는 시간 체크하는 작업

start = time.time() # 시작시간
for i in range(10):
    print(i)
    time.sleep(1)
end = time.time() # 끝나는 시간
print(end-start)  # 작업 시간 = 끝나는 시간에서 - 시작 시간
print(end, start)

● calendar 라이브러리

- 달력 함수

- calendar.calendar(년도), calendar.prcal(년도)  : 달력 출력

import calendar

print(calendar.calendar(2022)) # 2022년 달력 출력
calendar.prcal(2022) # 달력 출력

- calendar.prmonth(년도, 월) : 월 달력 출력, calendar.weekday(년, 월, 일) : 요일 출력

calendar.prmonth(2022,3) # 2022년 3월 달력 출력(월 달력 출력)

calendar.weekday(2022,3,10) # 요일 출력 0:월 ~ 6:일

 

- 요일 출력 3가지 방법(calendar, time, datetime)

# calendar
'월화수목금토일'[calendar.weekday(2022,4,15)] + '요일' # 인덱스로 한글 요일 출력
# time
'월화수목금토일'[time.localtime().tm_wday] + '요일' # 인덱스로 한글 요일 출력
# datetime
'월화수목금토일'[datetime.datetime.now().weekday()] + '요일' # 인덱스로 한글 요일 출력

● dateutil

- 날짜 다룰 때 유용한 라이브러리

- dateutil.relativedelta.relativedelta(years=년수, month=개월 수)

# 날짜에 년, 개월 더하기
datetime.date(2022,4,15) + dateutil.relativedelta.relativedelta(years=1,months=1)

# 날짜에 일 더하기
datetime.date(2022,4,15) + datetime.timedelta(days=365)
datetime.date(2022,4,15) + dateutil.relativedelta.relativedelta(days=365)
# 주, 일, 시, 분, 초 더하기
datetime.datetime(2022,4,15,17,20,30) + dateutil.relativedelta.relativedelta(weeks=2, days=10,hours=5,minutes=30,seconds=31)