기간별 날짜 문자열 생성

yyyymmdd 기간동안 일별 또는 월별 자료 생성

  • 기준 시작 및 끝 날짜 지정하고 그 기간동안 일일을 yyyymmdd형태로 생성
    • start_date: 기준 시작 연월일
    • end_date: 기준 끝 연월일
    • current_date: 시작 연월일 부터 끝 연월일까지
    • timedelta(days = 1)1일 간격으로 생성
  • timedelta: 날짜와 시간 간의 차이를 나타내는데 사용
    • 매개변수: days, hours, minutes, seconds
    • days=1을 통해
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
 
start_date = datetime(2023, 2, 21)
end_date = datetime(2024, 2, 20)
 
date_list = []
 
current_date = start_date
# 일별
while current_date <= end_date:
    date_list.append(current_date.strftime('%Y%m%d'))
    current_date += timedelta(days=1) # 일별
# 월별
while current_date <= end_date:
    date_list.append(current_date.strftime('%Y%m'))
    current_date += relativedelta(months = 1) # 월별
 
print(date_list)

시간 간격

timedelta

datetime 패키지

  • 일(day) 단위로만 지원됨
  • 매개변수: days, hours, minutes, seconds

relativedelta

dateutil.relativedelta 패키지

  • 월 단위 이상으로 시간 간격을 설정할 경우 활용
  • 매개변수: months, years
from datetime import datetime 
from dateutil.relativedelta import relativedelta 
 
# 현재 날짜와 시간 가져오기 
current_datetime = datetime.now() 
 
# 4년 전 날짜 계산 
four_years_ago = current_datetime - relativedelta(years=4)
 
# 양식 설정
four_years_age = four_years_age.strftime("%Y%m%d")

날짜 양식

날짜 양식 맞춤

  • date 타입에 strftime() 메서드 활용

yyyymmdd

  • %Y: 연도를 나타냅니다(네 자리).
  • %m: 월을 나타냅니다(01부터 12까지).
  • %d: 일(day)을 나타냅니다(01부터 31까지).
  • 예 1) 2024-02-28
    • strftime('%Y-%m-%d)
  • 예 2) 20240228
    • strftime('%Y%m%d)

연월일 외 시간까지 표현

  • 예) 15:32:02
    • strftime('%H:%M:%S')
  • 예) 153202
    • strftime('%H%M%S')
  • %H: 24시간 형식의 시간을 나타냅니다(00부터 23까지).
  • %M: 분을 나타냅니다(00부터 59까지).
  • %S: 초를 나타냅니다(00부터 59까지).
  • %A: 요일의 전체 이름을 나타냅니다(예: Monday).
  • %B: 월의 전체 이름을 나타냅니다(예: January).
  • %a: 요일의 축약된 이름을 나타냅니다(예: Mon).
  • %b: 월의 축약된 이름을 나타냅니다(예: Jan).
  • %p: AM 또는 PM을 나타냅니다.

요일 표시

yyyymmdd 양식

  • dt 연산자 활용

요일 문자열 추출

  • dt.day_name()
    • 월요일: Monday / 일요일: Sunday
from datetime import datetime
import pandas as pd
 
# date 타입 변환
df['date'] = pd.to_datetime(df['date'], format = '%Y%m%d')
df['weekday'] = df['date'].day_name()

요일 정수 추출

  • dt.dayofweek
  • dt.weekday
    • 0 - 월요일 / 6 - 일요일
# date 타입 변환
df['date'] = pd.to_datetime(df['date'], format = '%Y%m%d')
df['weekday'] = df['date'].dayofweek
df['weekday'] = df['date'].weekday

평일 / 주말 구분

  • 요일 문자열을 조건문 활용
  • 요일 정수를 조건문 활용
    • 요일 정수값을 5로 나눈 후 몫이 1인 경우, 주말
df['weekday'] = df['date'].apply(lambda x: '주말' if x.weekday() // 5 == 1 else '평일')

날짜 출력

import datetime
 
# 현재시간 지정
now = datetime.datetime.now()
 
# 날짜 및 시간 출력
print(now.year, '년')  
print(now.month, '월')  
print(now.day, '일')  
print(now.hour, '시')  
print(now.minute, '분')  
print(now.second, '초')

문자열을 날짜 형식으로 변환

  • col1 열 값 날짜 및 시간 형식으로 변환
  • 변환 과정 중 오류 발생 시 NaT(Not a Time)으로 반환
pd.to_datetime(df['col1'], errors='coerce)

시작 및 끝 연월일 구하기

목적

날짜 정보를 입력받아 해당 날짜의 시작연월일과 끝연월일 구하기

from datetime import datetime, timedelta  
from dateutil.relativedelta import relativedelta
 
def get_first_day(date):  
    first_day = datetime(year=date.year, month=date.month, day=1).date()  
    return first_day.strftime('%Y%m%d')  
  
  
def get_last_day(date):  
    first_day = datetime(year=date.year, month=date.month, day=1).date()  
    last_day = first_day + relativedelta(months=1) - timedelta(days=1)  
    return last_day.strftime('%Y%m%d')