Files
python-examples/doc/21_date_time.md
2025-01-20 02:26:20 +09:00

5.9 KiB

날짜와 시간

파이썬에서 날짜와 시간을 다루기 위해 주로 datetime 모듈을 사용합니다. 이 모듈은 날짜와 시간 관련 다양한 클래스와 메서드를 제공하여 날짜 계산, 시간 차이 계산, 포맷팅 등 다양한 작업을 수행할 수 있도록 합니다.

datetime 모듈의 주요 클래스

  • datetime: 날짜와 시간을 함께 나타내는 클래스입니다.
  • date: 날짜만 나타내는 클래스입니다.
  • time: 시간만 나타내는 클래스입니다.
  • timedelta: 두 날짜 또는 시간 사이의 차이를 나타내는 클래스입니다.
import datetime

# 현재 시간 가져오기
now = datetime.datetime.now()
print(now)  # 출력 예: 2023-11-22 14:34:27.123456

# 특정 날짜 생성
birthday = datetime.date(1990, 12, 25)
print(birthday)  # 출력 예: 1990-12-25

# 날짜와 시간 계산
time_difference = datetime.datetime.now() - birthday
print(time_difference)  # 출력 예: 12186 days, 14:34:27.123456

# 하루를 더한 날짜
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
print(tomorrow)  # 예: 2023-11-23

# 날짜 포맷팅
formatted_date = birthday.strftime("%Y년 %m월 %d일")
print(formatted_date)  # 출력 예: 1990년 12월 25일

주요 메서드 및 속성

  • now(): 현재 시각을 반환합니다.
  • today(): 오늘 날짜를 반환합니다.
  • strftime(): 날짜와 시간을 지정된 형식의 문자열로 변환합니다.
  • strptime(): 문자열을 datetime 객체로 변환합니다.
  • year, month, day, hour, minute, second: 각각 연도, 월, 일, 시, 분, 초를 나타내는 속성입니다.
  • weekday(): 요일을 숫자로 반환합니다 (0: 월요일, 1: 화요일, ...).
  • timedelta: 두 datetime 객체의 차이를 나타내며, 일, 시간, 분, 초 등을 계산할 수 있습니다.

날짜와 시간 포맷팅

strftime 메서드를 사용하여 다양한 형식으로 날짜와 시간을 표현할 수 있습니다.

  • %Y 4자리 연도
  • %m 월 (01-12)
  • %d 일 (01-31)
  • %H 24시간 형식 시 (00-23)
  • %M 분 (00-59)
  • %S 초 (00-59)
  • %A 요일 (Monday, Tuesday, ...)
  • %B 월 (January, February, ...)

시간대

pytz 모듈은 파이썬에서 다양한 시간대를 정확하게 처리하기 위한 필수적인 도구입니다. 특히, 서머타임과 같은 복잡한 시간대 변화를 정확하게 반영하여 시간 계산을 수행할 수 있도록 지원합니다.

  • 정확한 시간대 정보: 전 세계의 다양한 시간대 정보를 제공합니다.
  • 서머타임 처리: 서머타임 시작 및 종료 시점을 정확하게 반영하여 계산합니다.
  • 시간대 변환: 다른 시간대 간의 시간 변환을 쉽게 수행할 수 있습니다.
pip install pytz
  • Naive datetime: 시간대 정보가 없는 datetime 객체입니다.
  • Aware datetime: 시간대 정보가 포함된 datetime 객체입니다.
  • pytz는 대부분의 경우 Aware datetime을 사용합니다.
import datetime
import pytz

# 특정 시간대 설정
tz = pytz.timezone('Asia/Seoul')

# 현재 시각을 해당 시간대로 변환
now = datetime.datetime.now(tz)
print(now)  # 예: 2023-11-22 14:34:27+09:00

# UTC 시간을 특정 시간대로 변환
utc = datetime.datetime.utcnow()
local_dt = utc.astimezone(tz)
print(local_dt)

# 서울 시간을 뉴욕 시간으로 변환
seoul_tz = pytz.timezone('Asia/Seoul')
new_york_tz = pytz.timezone('America/New_York')
seoul_time = datetime.datetime.now(seoul_tz)
new_york_time = seoul_time.astimezone(new_york_tz)
print(new_york_time)
  • 시간대 객체 생성: pytz.timezone('시간대 이름')을 통해 시간대 객체를 생성합니다.
  • 시간대 변환: astimezone() 메서드를 사용하여 다른 시간대로 변환합니다.
  • 시간대 목록: pytz.all_timezones를 통해 모든 지원되는 시간대 목록을 확인할 수 있습니다.

스케쥴

schedule 모듈은 파이썬에서 특정 시간이나 주기적으로 함수를 실행하도록 스케줄링하는 데 사용되는 간단하고 직관적인 라이브러리입니다. 별도의 설치가 필요 없이 바로 사용할 수 있으며, 복잡한 설정 없이 간단하게 작업을 예약할 수 있다는 장점이 있습니다.

  • 시간 기반 스케줄링: 특정 시간에 함수를 실행하도록 설정할 수 있습니다.
  • 주기적인 스케줄링: 매일, 매주, 매월 등 주기적으로 함수를 실행하도록 설정할 수 있습니다.
  • 일회성 스케줄링: 한 번만 실행되는 작업을 예약할 수 있습니다.
  • 다양한 시간 단위 지원: 초, 분, 시간, 일, 주 등 다양한 시간 단위를 지원합니다.
  • 간단한 API: 직관적인 인터페이스를 제공하여 쉽게 사용할 수 있습니다.
import schedule
import time

def job():
    print("Hello, World!")

# 매일 오전 9시에 job 함수 실행
schedule.every().day.at("09:00").do(job)

# 무한 루프를 돌면서 스케줄된 작업 실행
while True:
    schedule.run_pending()
    time.sleep(1)

주요 메서드

  • every(): 스케줄을 설정하는 시작점입니다.
  • day, hour, minute, second: 각각 일, 시간, 분, 초 단위의 스케줄을 설정합니다.
  • do(job): 실행할 함수를 지정합니다.
  • run_pending(): 현재 시간에 실행해야 할 작업이 있는지 확인하고 실행합니다.
# 매주 월요일 오후 5시에 작업 실행
schedule.every().monday.at("17:00").do(my_job)

# 5초마다 작업 실행
schedule.every(5).seconds.do(another_job)
  • 무한 루프: schedule.run_pending()을 무한 루프 안에서 실행해야 스케줄된 작업이 정상적으로 수행됩니다.
  • 시간 정확도: 시스템 시간에 의존하므로 시스템 시간이 정확하지 않으면 스케줄이 제대로 작동하지 않을 수 있습니다.
  • 병렬 처리: schedule 모듈은 단일 스레드 환경에서 사용하기에 적합합니다. 병렬 처리가 필요한 경우 다른 라이브러리를 사용해야 합니다.