[Python 모듈] datetime : 날짜와 시간을 다루는 모듈

1. datetime 모듈이란?

 

datetime 모듈은 파이썬 내장 모듈 중 하나로, 날짜와 시간을 다루기 위한 클래스와 함수를 제공합니다. 이 모듈은 date, time, datetime, timedelta 등 다양한 클래스를 제공하며, 이들을 이용해 날짜와 시간을 쉽게 다룰 수 있습니다. 

 

datetime 모듈은 별도의 설치 과정이 필요없습니다. 모듈을 사용하려면 아래와 같이 import를 하면 됩니다.

import datetime

 


2. datetime.datetime 

 

datetime 클래스는 년, 월, 일, 시간, 분, 초, 마이크로초 등을 포함하는 datetime 객체를 생성합니다. 이 객체는 많은 메소드를 가지고 있으며, 이를 통해 날짜 및 시간 정보를 처리할 수 있습니다.

 

코드에서는 datetime 모듈에서 현재 날짜와 시간을 가져오고, 또 다른 날짜와 시간을 생성하고 연산하며 비교합니다. 

import datetime

# 현재 날짜와 시간 출력
now = datetime.datetime.now()
print("현재 날짜와 시간:", now)

# 날짜와 시간을 문자열로 출력
print("현재 시간 (문자열):", now.strftime("%Y-%m-%d %H:%M:%S"))

# 날짜와 시간을 생성
dt = datetime.datetime(2021, 9, 1, 12, 30, 45)
print("생성된 날짜와 시간:", dt)

# 날짜와 시간 연산
tomorrow = now + datetime.timedelta(days=1)
print("내일 날짜와 시간:", tomorrow)

# 날짜와 시간 비교
if now > dt:
    print("현재 날짜와 시간이 생성된 날짜와 시간보다 뒤에 있습니다.")
else:
    print("현재 날짜와 시간이 생성된 날짜와 시간보다 앞에 있습니다.")

 


2.1 datetime.datetime.strptime

 

datetime.datetime.strptime는 문자열로 된 날짜 및 시간을 datetime 객체로 변환하는 데 사용됩니다. strptime은 "string parse time"의 약자입니다.

 

strptime 함수는 아래와 같은 인자를 받습니다.

 

  • date_string: 변환하려는 날짜와 시간 정보를 포함하는 문자열입니다.
  • format: date_string의 포맷을 지정합니다.

 

datetime.strptime(date_string, format)

 

코드에서는 strptime 함수를 사용하여 문자열로 된 날짜와 시간을 datetime 객체로 변환하고, 이를 다른 포맷으로 변환하여 출력합니다. 

import datetime

# 문자열로 된 날짜를 datetime 객체로 변환
date_string = "2021-09-01 12:30:45"
dt = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print("변환된 datetime 객체:", dt)

# datetime 객체를 다른 포맷으로 변환하여 출력
print("변환된 datetime 객체 (다른 포맷):", dt.strftime("%Y년 %m월 %d일 %H시 %M분 %S초"))

 


2.2 datetime.datetime.strftime

 

datetime.datetime.strftime는 지정한 포맷에 맞게 문자열로 변환하는 데 사용됩니다. strftime은 "string format time"의 약자입니다.

 

strftime 함수는 아래와 같은 인자를 받습니다.

 

  • format: datetime 객체를 변환할 문자열의 포맷을 지정합니다.

 

datetime.strftime(format)

 

아래 코드에서는 strftime 함수를 사용하여 datetime 객체를 문자열로 변환하고, 이를 출력합니다. 

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체를 문자열로 변환
date_string = now.strftime("%Y년 %m월 %d일 %H시 %M분 %S초")
print("변환된 문자열:", date_string)

 


2.3 datetime.datetime.date

 

datetime.datetime.date는 날짜 정보만 추출하는 데 사용됩니다. 즉, datetime 객체에서 시간 정보를 제외한 date 객체를 반환합니다.



코드에서는 date 메소드를 사용하여 datetime 객체에서 날짜 정보를 추출하고, 이를 다른 포맷으로 변환하여 출력합니다. 

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체에서 날짜 정보 추출
date = now.date()
print("datetime 객체에서 추출된 date 객체:", date)

# date 객체를 다른 포맷으로 변환하여 출력
print("변환된 date 객체 (다른 포맷):", date.strftime("%Y년 %m월 %d일"))

 


2.4 datetime.datetime.time

 

datetime.datetime.time은 시간 정보만 추출하는 데 사용됩니다. 즉, datetime 객체에서 날짜 정보를 제외한 time 객체를 반환합니다.

 

코드에서는 time 메소드를 사용하여 datetime 객체에서 시간 정보를 추출하고, 이를 다른 포맷으로 변환하여 출력합니다. 

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체에서 시간 정보 추출
time = now.time()
print("datetime 객체에서 추출된 time 객체:", time)

# time 객체를 다른 포맷으로 변환하여 출력
print("변환된 time 객체 (다른 포맷):", time.strftime("%H시 %M분 %S초"))

 


2.5 datetime.datetime.replace

 

datetime.datetime.replace는 datetime 객체의 속성을 변경하여 새로운 datetime 객체를 반환하는 데 사용됩니다.

 

replace 메소드는 아래와 같은 인자를 받습니다.

  • year: 연도를 나타내는 정수 값입니다.
  • month: 월을 나타내는 정수 값입니다.
  • day: 일을 나타내는 정수 값입니다.
  • hour: 시간을 나타내는 정수 값입니다.
  • minute: 분을 나타내는 정수 값입니다.
  • second: 초를 나타내는 정수 값입니다.
  • microsecond: 마이크로초를 나타내는 정수 값입니다.
  • tzinfo: 시간대 정보를 나타내는 객체입니다.
  • fold: datetime 객체가 중복된 시간을 나타내는 경우 fold 값이 1이 됩니다.

 

datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)

 

코드에서는 replace 메소드를 사용하여 현재 시간의 연도, 월, 일, 시간, 분, 초를 변경하고, 새로운 datetime 객체를 생성합니다.

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체의 속성 변경
new_datetime = now.replace(year=2022, month=1, day=1, hour=0, minute=0, second=0)
print("변경된 datetime 객체:", new_datetime)

# 변경된 datetime 객체와 원래 객체 비교
if now < new_datetime:
    print("변경된 datetime 객체가 원래 객체보다 미래입니다.")
else:
    print("원래 datetime 객체가 변경된 객체보다 미래입니다.")

 



2.6 datetime.datetime.weekday

 

datetime.datetime.weekday는 datetime 객체가 나타내는 요일을 정수로 반환합니다. 이때 월요일은 0이며, 일요일은 6입니다.

 

코드에서는 weekday 메소드를 사용하여 현재 날짜의 요일을 출력하고, 이를 다른 포맷으로 변환하여 출력합니다. 이를 통해 weekday 메소드의 사용 방법을 알 수 있습니다.

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# 해당 날짜의 요일 출력
weekday = now.weekday()
print("현재 날짜의 요일 (정수):", weekday)

# 요일 정보를 문자열로 변환하여 출력
weekday_str = ["월", "화", "수", "목", "금", "토", "일"][weekday]
print("현재 날짜의 요일 (문자열):", weekday_str)

 


2.7 datetime.datetime.isoweekday

 

datetime.datetime.isoweekday는 datetime 객체가 나타내는 요일을 정수로 반환합니다. 이때 월요일은 1이며, 일요일은 7입니다.

 

코드에서는 isoweekday 메소드를 사용하여 현재 날짜의 ISO 요일을 출력합니다. 

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# 해당 날짜의 ISO 요일 출력
isoweekday = now.isoweekday()
print("현재 날짜의 ISO 요일:", isoweekday)

 


2.8 datetime.datetime.timestamp

 

datetime.datetime.timestamp는 datetime 객체를 "UNIX timestamp"로 변환하는 데 사용됩니다. UNIX timestamp는 1970년 1월 1일 00:00:00 UTC부터 현재까지 경과된 시간을 초 단위로 표현한 값입니다.

 

코드에서는 timestamp 메소드를 사용하여 datetime 객체를 UNIX timestamp로 변환하고, 이를 출력합니다. 또한, timestamp 값을 datetime 객체로 변환하여 출력합니다. 

import datetime

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체를 timestamp로 변환
timestamp = now.timestamp()
print("datetime 객체의 timestamp 값:", timestamp)

# timestamp 값을 datetime 객체로 변환
new_datetime = datetime.datetime.fromtimestamp(timestamp)
print("변환된 datetime 객체:", new_datetime)

 


2.9 datetime.datetime.astimezone

 

datetime.datetime.astimezone는 datetime 객체의 시간대를 변경하는 데 사용됩니다. 이때 변경하려는 시간대는 tzinfo 객체를 사용하여 지정합니다.

 

astimezone 메소드는 아래와 같은 인자를 받습니다.

 

  • tz: 변경하려는 시간대를 나타내는 tzinfo 객체입니다. 만약 None이면, 기본 시간대를 사용합니다.

 

datetime.astimezone(tz=None)

 

코드에서는 astimezone 메소드를 사용하여 현재 시간의 시간대를 한국 표준시 (Asia/Seoul)로 변경하고, 새로운 datetime 객체를 생성합니다. 

import datetime
import pytz

# 현재 날짜와 시간
now = datetime.datetime.now()

# datetime 객체의 시간대 변경
new_timezone = pytz.timezone("Asia/Seoul")
new_datetime = now.astimezone(new_timezone)
print("변경된 datetime 객체:", new_datetime)

 


3. datetime.timedelta 

 

datetime.timedelta 두 날짜 또는 시간 간격을 나타냅니다. timedelta 객체를 생성하면, 날짜와 시간을 쉽게 조작할 수 있습니다. 

 

timedelta 클래스는 아래와 같은 인자를 받습니다. 아래와 같이 인자를 전달하면, 해당 인자에 해당하는 시간 간격이 timedelta 객체로 생성됩니다. 모든 인자는 선택적이며, 기본값은 0입니다. 인자는 부호 있는 정수이며, 음수도 사용할 수 있습니다.

 

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

 

timedelta 객체는 다음과 같은 연산을 지원합니다.

 

  • 덧셈 (+) 및 뺄셈 (-) 연산
  • 정수와의 곱셈 연산
  • 비교 연산

 

코드에서는 timedelta 객체를 사용하여 현재 시간으로부터 2시간 뒤와 3일 전의 날짜를 계산하고, 1시간 30분과 3배 긴 시간 간격을 계산하며 비교합니다. 

import datetime

# 현재 시간
now = datetime.datetime.now()

# 2시간 뒤의 시간 계산
later = now + datetime.timedelta(hours=2)
print("2시간 뒤의 시간:", later)

# 3일 전의 날짜 계산
before = now - datetime.timedelta(days=3)
print("3일 전의 날짜:", before)

# 1시간 30분의 시간 간격 계산
diff = datetime.timedelta(hours=1, minutes=30)
print("1시간 30분의 시간 간격:", diff)

# timedelta 객체와 정수의 곱셈 연산
long_diff = diff * 3
print("3배 긴 시간 간격:", long_diff)

# timedelta 객체 비교
if long_diff > diff:
    print("긴 시간 간격이 짧은 시간 간격보다 큽니다.")
else:
    print("짧은 시간 간격이 긴 시간 간격보다 큽니다.")

 


4. datetime.date

 

datetime.date는 날짜 정보를 저장하는 데 사용됩니다. date 객체를 생성하면, 해당 날짜의 연, 월, 일 정보를 가지고 있는 객체가 생성됩니다.

 

date 클래스는 아래와 같은 인자를 받습니다. 아래와 같이 인자를 전달하면, 해당 인자에 해당하는 날짜를 가지는 date 객체가 생성됩니다.

 

date(year, month, day)

 

date 객체는 다음과 같은 메소드를 지원합니다.

 

  • weekday(): 해당 날짜의 요일을 정수로 반환합니다. 월요일부터 일요일까지 각각 0부터 6까지의 값을 반환합니다.
  • isoweekday(): 해당 날짜의 요일을 정수로 반환합니다. 월요일부터 일요일까지 각각 1부터 7까지의 값을 반환합니다.
  • strftime(format): 해당 날짜를 지정한 포맷에 맞게 문자열로 반환합니다.

 

코드에서는 date 클래스를 사용하여 2021년 9월 1일 날짜를 생성하고, 해당 날짜의 요일을 출력하며, 연산과 비교도 수행합니다. 

import datetime

# 2021년 9월 1일 date 객체 생성
d = datetime.date(2021, 9, 1)
print("생성된 date 객체:", d)

# 해당 날짜의 요일 출력
print("해당 날짜의 요일 (정수):", d.weekday())
print("해당 날짜의 요일 (문자열):", d.strftime("%A"))

# 해당 날짜의 ISO 요일 출력
print("해당 날짜의 ISO 요일:", d.isoweekday())

# 날짜 연산
tomorrow = d + datetime.timedelta(days=1)
print("내일 날짜:", tomorrow)

# 날짜 비교
if tomorrow > d:
    print("내일 날짜가 오늘 날짜보다 미래입니다.")
else:
    print("오늘 날짜가 내일 날짜보다 미래입니다.")