Zum Hauptinhalt springen

๋‚ ์งœ์™€ ์‹œ๊ฐ„

In Python ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋‹ค๋ฃจ๋Š” Methode lernen wir. datetime Modul์€ ์‹œ๊ฐ„ ๊ด€๋ จ ์ž‘์—…์˜ ํ•ต์‹ฌ ๋„๊ตฌ.

datetime Modul ์†Œ๊ฐœ โฐโ€‹

datetime Modul์˜ ์ฃผ์š” Klasse:

  • datetime: ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ•จ๊ป˜ ๋‹ค๋ฃธ
  • date: ๋‚ ์งœ๋งŒ ๋‹ค๋ฃธ
  • time: ์‹œ๊ฐ„๋งŒ ๋‹ค๋ฃธ
  • timedelta: ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๋‹ค๋ฃธ
  • timezone: ์‹œ๊ฐ„๋Œ€ ์ •๋ณด

ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„โ€‹

ํ˜„์žฌ datetime ์–ป๊ธฐโ€‹

from datetime import datetime

# ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„
now = datetime.now()
print(now) # 2025-11-27 14:30:45.123456

# UTC ํ˜„์žฌ ์‹œ๊ฐ„
utc_now = datetime.utcnow()
print(utc_now)

# ๊ฐ ์š”์†Œ ์ ‘๊ทผ
print(f'์—ฐ๋„: {now.year}')
print(f'์›”: {now.month}')
print(f'์ผ: {now.day}')
print(f'์‹œ: {now.hour}')
print(f'๋ถ„: {now.minute}')
print(f'์ดˆ: {now.second}')
print(f'๋งˆ์ดํฌ๋กœ์ดˆ: {now.microsecond}')

ํ˜„์žฌ ๋‚ ์งœ๋งŒ ์–ป๊ธฐโ€‹

from datetime import date

# ์˜ค๋Š˜ ๋‚ ์งœ
today = date.today()
print(today) # 2025-11-27

print(f'์—ฐ๋„: {today.year}')
print(f'์›”: {today.month}')
print(f'์ผ: {today.day}')
print(f'์š”์ผ: {today.weekday()}') # 0(์›”) ~ 6(์ผ)
print(f'์š”์ผ: {today.isoweekday()}') # 1(์›”) ~ 7(์ผ)

datetime ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐโ€‹

๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ƒ์„ฑโ€‹

from datetime import datetime, date, time

# ํŠน์ • ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ƒ์„ฑ
dt = datetime(2025, 11, 27, 14, 30, 45)
print(dt) # 2025-11-27 14:30:45

# ๋‚ ์งœ๋งŒ ์ƒ์„ฑ
d = date(2025, 11, 27)
print(d) # 2025-11-27

# ์‹œ๊ฐ„๋งŒ ์ƒ์„ฑ
t = time(14, 30, 45)
print(t) # 14:30:45

# ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๊ฒฐํ•ฉ
dt_combined = datetime.combine(d, t)
print(dt_combined) # 2025-11-27 14:30:45

๋ฌธ์ž์—ด๊ณผ datetime ๋ณ€ํ™˜ ๐Ÿ“โ€‹

strftime: datetime โ†’ ๋ฌธ์ž์—ดโ€‹

from datetime import datetime

now = datetime.now()

# ๋‹ค์–‘ํ•œ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜
print(now.strftime('%Y-%m-%d')) # 2025-11-27
print(now.strftime('%Y๋…„ %m์›” %d์ผ')) # 2025๋…„ 11์›” 27์ผ
print(now.strftime('%H:%M:%S')) # 14:30:45
print(now.strftime('%Y-%m-%d %H:%M:%S')) # 2025-11-27 14:30:45
print(now.strftime('%Y/%m/%d %p %I:%M')) # 2025/11/27 PM 02:30

์ฃผ์š” ํฌ๋งท ์ฝ”๋“œโ€‹

์ฝ”๋“œ์˜๋ฏธ์˜ˆ์‹œ
%Y4์ž๋ฆฌ ์—ฐ๋„2025
%y2์ž๋ฆฌ ์—ฐ๋„25
%m์›” (01-12)11
%B์›” ์ด๋ฆ„November
%b์›” ์ด๋ฆ„ ์ถ•์•ฝNov
%d์ผ (01-31)27
%A์š”์ผWednesday
%a์š”์ผ ์ถ•์•ฝWed
%H์‹œ (00-23)14
%I์‹œ (01-12)02
%M๋ถ„ (00-59)30
%S์ดˆ (00-59)45
%pAM/PMPM
%f๋งˆ์ดํฌ๋กœ์ดˆ123456

strptime: ๋ฌธ์ž์—ด โ†’ datetimeโ€‹

from datetime import datetime

# ๋ฌธ์ž์—ด์„ datetime์œผ๋กœ ๋ณ€ํ™˜
date_str = '2025-11-27'
dt = datetime.strptime(date_str, '%Y-%m-%d')
print(dt) # 2025-11-27 00:00:00

# ์‹œ๊ฐ„ ํฌํ•จ
datetime_str = '2025-11-27 14:30:45'
dt = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
print(dt)

# ๋‹ค์–‘ํ•œ ํ˜•์‹
formats = [
('2025/11/27', '%Y/%m/%d'),
('11/27/2025', '%m/%d/%Y'),
('27-Nov-2025', '%d-%b-%Y'),
('2025๋…„ 11์›” 27์ผ', '%Y๋…„ %m์›” %d์ผ'),
]

for date_str, fmt in formats:
dt = datetime.strptime(date_str, fmt)
print(f'{date_str} โ†’ {dt}')

timedelta: ์‹œ๊ฐ„ ์ฐจ์ด ๊ณ„์‚ฐ โฑ๏ธโ€‹

Grundlegend ์‚ฌ์šฉ๋ฒ•โ€‹

from datetime import datetime, timedelta

# timedelta ์ƒ์„ฑ
delta = timedelta(
days=7,
hours=3,
minutes=30,
seconds=45
)

print(delta) # 7 days, 3:30:45
print(f'์ด ์ดˆ: {delta.total_seconds()}')

๋‚ ์งœ ๊ณ„์‚ฐโ€‹

from datetime import datetime, timedelta

now = datetime.now()

# ๋ฏธ๋ž˜ ๋‚ ์งœ ๊ณ„์‚ฐ
tomorrow = now + timedelta(days=1)
next_week = now + timedelta(weeks=1)
next_month = now + timedelta(days=30)
one_hour_later = now + timedelta(hours=1)

print(f'๋‚ด์ผ: {tomorrow}')
print(f'๋‹ค์Œ ์ฃผ: {next_week}')

# ๊ณผ๊ฑฐ ๋‚ ์งœ ๊ณ„์‚ฐ
yesterday = now - timedelta(days=1)
last_week = now - timedelta(weeks=1)

print(f'์–ด์ œ: {yesterday}')
print(f'์ง€๋‚œ ์ฃผ: {last_week}')

๋‚ ์งœ ์ฐจ์ด ๊ณ„์‚ฐโ€‹

from datetime import datetime

# ๋‘ ๋‚ ์งœ์˜ ์ฐจ์ด
birthday = datetime(1990, 5, 15)
now = datetime.now()

age_delta = now - birthday

print(f'์‚ด์•„์˜จ ์ผ์ˆ˜: {age_delta.days}')
print(f'์‚ด์•„์˜จ ์‹œ๊ฐ„: {age_delta.total_seconds() / 3600:.0f}์‹œ๊ฐ„')
print(f'๋‚˜์ด: {age_delta.days // 365}์„ธ')

์‹œ๊ฐ„๋Œ€ (Timezone) ๐ŸŒโ€‹

timezone ์‚ฌ์šฉโ€‹

from datetime import datetime, timezone, timedelta

# UTC ์‹œ๊ฐ„
utc_now = datetime.now(timezone.utc)
print(f'UTC: {utc_now}')

# ํŠน์ • ์‹œ๊ฐ„๋Œ€ (UTC+9, ํ•œ๊ตญ)
kst = timezone(timedelta(hours=9))
kst_now = datetime.now(kst)
print(f'KST: {kst_now}')

# ์‹œ๊ฐ„๋Œ€ ๋ณ€ํ™˜
utc_time = datetime(2025, 11, 27, 14, 30, tzinfo=timezone.utc)
kst_time = utc_time.astimezone(kst)
print(f'UTC: {utc_time}')
print(f'KST: {kst_time}')

pytz ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (๋” ์ •ํ™•ํ•œ ์‹œ๊ฐ„๋Œ€)โ€‹

# pip install pytz ํ•„์š”
try:
import pytz
from datetime import datetime

# ์‹œ๊ฐ„๋Œ€ ์ƒ์„ฑ
seoul = pytz.timezone('Asia/Seoul')
new_york = pytz.timezone('America/New_York')
london = pytz.timezone('Europe/London')

# ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ฐ ์‹œ๊ฐ„๋Œ€๋กœ
now = datetime.now()
seoul_time = seoul.localize(now)

print(f'์„œ์šธ: {seoul_time}')
print(f'๋‰ด์š•: {seoul_time.astimezone(new_york)}')
print(f'๋Ÿฐ๋˜: {seoul_time.astimezone(london)}')

except ImportError:
print('pytz ์„ค์น˜ ํ•„์š”: pip install pytz')

์‹ค์ „ Beispiel ๐Ÿ’กโ€‹

Beispiel 1: D-day ๊ณ„์‚ฐ๊ธฐโ€‹

from datetime import datetime, date

def calculate_dday(target_date):
"""D-day ๊ณ„์‚ฐ"""
if isinstance(target_date, str):
target_date = datetime.strptime(target_date, '%Y-%m-%d').date()

today = date.today()
delta = target_date - today

if delta.days > 0:
return f'D-{delta.days}'
elif delta.days == 0:
return 'D-Day!'
else:
return f'D+{abs(delta.days)}'

# ์‚ฌ์šฉ Beispiel
exam_date = '2025-12-25'
print(f'์‹œํ—˜์ผ: {calculate_dday(exam_date)}')

wedding_date = date(2025, 6, 15)
print(f'๊ฒฐํ˜ผ์‹: {calculate_dday(wedding_date)}')

Beispiel 2: ๋‚˜์ด ๊ณ„์‚ฐ๊ธฐโ€‹

from datetime import date

def calculate_age(birth_date):
"""๋งŒ ๋‚˜์ด ๊ณ„์‚ฐ"""
if isinstance(birth_date, str):
birth_date = datetime.strptime(birth_date, '%Y-%m-%d').date()

today = date.today()
age = today.year - birth_date.year

# ์ƒ์ผ์ด ์•ˆ ์ง€๋‚ฌ์œผ๋ฉด 1์‚ด ๋นผ๊ธฐ
if today.month < birth_date.month or \
(today.month == birth_date.month and today.day < birth_date.day):
age -= 1

return age

# ์‚ฌ์šฉ Beispiel
birth = '1990-05-15'
age = calculate_age(birth)
print(f'๋งŒ ๋‚˜์ด: {age}์„ธ')

Beispiel 3: ๊ทผ๋ฌด์‹œ๊ฐ„ ๊ณ„์‚ฐ๊ธฐโ€‹

from datetime import datetime, timedelta

class WorkTimeCalculator:
"""๊ทผ๋ฌด ์‹œ๊ฐ„ ๊ณ„์‚ฐ๊ธฐ"""

def __init__(self):
self.entries = []

def clock_in(self, time_str=None):
"""์ถœ๊ทผ ๊ธฐ๋ก"""
time = datetime.strptime(time_str, '%H:%M') if time_str else datetime.now()
self.entries.append({'in': time, 'out': None})
print(f'์ถœ๊ทผ: {time.strftime("%H:%M")}')

def clock_out(self, time_str=None):
"""ํ‡ด๊ทผ ๊ธฐ๋ก"""
if not self.entries or self.entries[-1]['out'] is not None:
print('์ถœ๊ทผ ๊ธฐ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค')
return

time = datetime.strptime(time_str, '%H:%M') if time_str else datetime.now()
self.entries[-1]['out'] = time
print(f'ํ‡ด๊ทผ: {time.strftime("%H:%M")}')

def get_total_hours(self):
"""์ด ๊ทผ๋ฌด ์‹œ๊ฐ„"""
total = timedelta()

for entry in self.entries:
if entry['out']:
delta = entry['out'] - entry['in']
total += delta

hours = total.total_seconds() / 3600
return hours

def get_summary(self):
"""๊ทผ๋ฌด ์š”์•ฝ"""
total_hours = self.get_total_hours()
print(f'\n=== ๊ทผ๋ฌด ์‹œ๊ฐ„ ์š”์•ฝ ===')
print(f'์ด ๊ทผ๋ฌด ์‹œ๊ฐ„: {total_hours:.2f}์‹œ๊ฐ„')
print(f'๊ทผ๋ฌด ์ผ์ˆ˜: {len(self.entries)}์ผ')
print(f'์ผํ‰๊ท : {total_hours/len(self.entries):.2f}์‹œ๊ฐ„')

# ์‚ฌ์šฉ Beispiel
calc = WorkTimeCalculator()
calc.clock_in('09:00')
calc.clock_out('18:00')
calc.clock_in('09:30')
calc.clock_out('17:30')
calc.get_summary()

Beispiel 4: ํƒ€์ž„์Šคํƒฌํ”„ ๋ณ€ํ™˜โ€‹

from datetime import datetime

class TimestampConverter:
"""Unix ํƒ€์ž„์Šคํƒฌํ”„ ๋ณ€ํ™˜๊ธฐ"""

@staticmethod
def datetime_to_timestamp(dt):
"""datetime โ†’ timestamp"""
return int(dt.timestamp())

@staticmethod
def timestamp_to_datetime(ts):
"""timestamp โ†’ datetime"""
return datetime.fromtimestamp(ts)

@staticmethod
def now_timestamp():
"""ํ˜„์žฌ ํƒ€์ž„์Šคํƒฌํ”„"""
return int(datetime.now().timestamp())

# ์‚ฌ์šฉ Beispiel
converter = TimestampConverter()

# ํ˜„์žฌ ํƒ€์ž„์Šคํƒฌํ”„
now_ts = converter.now_timestamp()
print(f'ํ˜„์žฌ ํƒ€์ž„์Šคํƒฌํ”„: {now_ts}')

# datetime โ†’ timestamp
dt = datetime(2025, 11, 27, 14, 30, 0)
ts = converter.datetime_to_timestamp(dt)
print(f'{dt} โ†’ {ts}')

# timestamp โ†’ datetime
dt_back = converter.timestamp_to_datetime(ts)
print(f'{ts} โ†’ {dt_back}')

Beispiel 5: ๋‚ ์งœ ๋ฒ”์œ„ ์ƒ์„ฑ๊ธฐโ€‹

from datetime import datetime, timedelta

def date_range(start_date, end_date, step_days=1):
"""๋‚ ์งœ ๋ฒ”์œ„ ์ƒ์„ฑ"""
if isinstance(start_date, str):
start_date = datetime.strptime(start_date, '%Y-%m-%d')
if isinstance(end_date, str):
end_date = datetime.strptime(end_date, '%Y-%m-%d')

current = start_date
while current <= end_date:
yield current
current += timedelta(days=step_days)

# ์‚ฌ์šฉ Beispiel
print('2025๋…„ 11์›” ๋ชจ๋“  ๋‚ ์งœ:')
for dt in date_range('2025-11-01', '2025-11-30'):
print(dt.strftime('%Y-%m-%d %A'))

print('\n๊ฒฉ์ฃผ ํ™”์š”์ผ:')
start = datetime(2025, 11, 1)
end = datetime(2025, 12, 31)
for dt in date_range(start, end, step_days=14):
if dt.weekday() == 1: # ํ™”์š”์ผ
print(dt.strftime('%Y-%m-%d'))

Beispiel 6: ํšŒ์˜ ์‹œ๊ฐ„ ๊ด€๋ฆฌโ€‹

from datetime import datetime, timedelta

class Meeting:
"""ํšŒ์˜ Klasse"""

def __init__(self, title, start_time, duration_minutes):
self.title = title
self.start_time = start_time
self.duration = timedelta(minutes=duration_minutes)
self.end_time = start_time + self.duration

def __str__(self):
return (f'{self.title}\n'
f'์‹œ์ž‘: {self.start_time.strftime("%H:%M")}\n'
f'์ข…๋ฃŒ: {self.end_time.strftime("%H:%M")}\n'
f'์†Œ์š”: {self.duration.total_seconds() / 60:.0f}๋ถ„')

def is_overlapping(self, other):
"""๋‹ค๋ฅธ ํšŒ์˜์™€ ๊ฒน์น˜๋Š”์ง€ ํ™•์ธ"""
return (self.start_time < other.end_time and
self.end_time > other.start_time)

class Schedule:
"""์ผ์ • ๊ด€๋ฆฌ"""

def __init__(self):
self.meetings = []

def add_meeting(self, meeting):
"""ํšŒ์˜ ์ถ”๊ฐ€"""
for existing in self.meetings:
if meeting.is_overlapping(existing):
print(f'โš ๏ธ {existing.title}์™€ ์‹œ๊ฐ„์ด ๊ฒน์นฉ๋‹ˆ๋‹ค!')
return False

self.meetings.append(meeting)
print(f'โœ… {meeting.title} ์ถ”๊ฐ€๋จ')
return True

def show_schedule(self):
"""์ผ์ • ๋ณด๊ธฐ"""
if not self.meetings:
print('๋“ฑ๋ก๋œ ํšŒ์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค')
return

print('\n=== ์˜ค๋Š˜์˜ ์ผ์ • ===')
for meeting in sorted(self.meetings, key=lambda m: m.start_time):
print(f'\n{meeting}')
print('-' * 30)

# ์‚ฌ์šฉ Beispiel
schedule = Schedule()

# ํšŒ์˜ ์ถ”๊ฐ€
morning_meeting = Meeting(
'์•„์นจ ์Šคํƒ ๋“œ์—…',
datetime.now().replace(hour=9, minute=0),
30
)
schedule.add_meeting(morning_meeting)

lunch_meeting = Meeting(
'์ ์‹ฌ ๋ฏธํŒ…',
datetime.now().replace(hour=12, minute=0),
60
)
schedule.add_meeting(lunch_meeting)

# ๊ฒน์น˜๋Š” ํšŒ์˜ ์‹œ๋„
overlap_meeting = Meeting(
'์ค‘๋ณต ํšŒ์˜',
datetime.now().replace(hour=12, minute=30),
30
)
schedule.add_meeting(overlap_meeting)

schedule.show_schedule()

Beispiel 7: ์ƒ๋Œ€์  ์‹œ๊ฐ„ ํ‘œ์‹œโ€‹

from datetime import datetime, timedelta

def relative_time(dt):
"""์ƒ๋Œ€์  ์‹œ๊ฐ„ ํ‘œ์‹œ (์˜ˆ: '3์‹œ๊ฐ„ ์ „')"""
if isinstance(dt, str):
dt = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')

now = datetime.now()
delta = now - dt

seconds = delta.total_seconds()

if seconds < 60:
return '๋ฐฉ๊ธˆ ์ „'
elif seconds < 3600:
minutes = int(seconds / 60)
return f'{minutes}๋ถ„ ์ „'
elif seconds < 86400:
hours = int(seconds / 3600)
return f'{hours}์‹œ๊ฐ„ ์ „'
elif seconds < 604800:
days = int(seconds / 86400)
return f'{days}์ผ ์ „'
elif seconds < 2592000:
weeks = int(seconds / 604800)
return f'{weeks}์ฃผ ์ „'
elif seconds < 31536000:
months = int(seconds / 2592000)
return f'{months}๊ฐœ์›” ์ „'
else:
years = int(seconds / 31536000)
return f'{years}๋…„ ์ „'

# ์‚ฌ์šฉ Beispiel
times = [
datetime.now() - timedelta(seconds=30),
datetime.now() - timedelta(minutes=15),
datetime.now() - timedelta(hours=3),
datetime.now() - timedelta(days=2),
datetime.now() - timedelta(weeks=3),
]

for time in times:
print(f'{time.strftime("%Y-%m-%d %H:%M:%S")} โ†’ {relative_time(time)}')

Beispiel 8: ์˜์—…์ผ ๊ณ„์‚ฐโ€‹

from datetime import datetime, timedelta

def is_weekend(date):
"""์ฃผ๋ง์ธ์ง€ ํ™•์ธ"""
return date.weekday() >= 5 # 5=ํ† , 6=์ผ

def add_business_days(start_date, days):
"""์˜์—…์ผ ์ถ”๊ฐ€ (์ฃผ๋ง ์ œ์™ธ)"""
current = start_date
added = 0

while added < days:
current += timedelta(days=1)
if not is_weekend(current):
added += 1

return current

def count_business_days(start_date, end_date):
"""์˜์—…์ผ ๊ณ„์‚ฐ"""
count = 0
current = start_date

while current <= end_date:
if not is_weekend(current):
count += 1
current += timedelta(days=1)

return count

# ์‚ฌ์šฉ Beispiel
today = date.today()
print(f'์˜ค๋Š˜: {today.strftime("%Y-%m-%d %A")}')

# 5์˜์—…์ผ ํ›„
after_5_days = add_business_days(today, 5)
print(f'5์˜์—…์ผ ํ›„: {after_5_days.strftime("%Y-%m-%d %A")}')

# ์˜์—…์ผ ์ˆ˜ ๊ณ„์‚ฐ
start = date(2025, 11, 1)
end = date(2025, 11, 30)
business_days = count_business_days(start, end)
print(f'11์›” ์˜์—…์ผ: {business_days}์ผ')

๋‚ ์งœ ๋น„๊ต ๐Ÿ”โ€‹

from datetime import datetime

dt1 = datetime(2025, 11, 27)
dt2 = datetime(2025, 12, 25)

# ๋น„๊ต ์—ฐ์‚ฐ
print(dt1 < dt2) # True
print(dt1 > dt2) # False
print(dt1 == dt2) # False
print(dt1 != dt2) # True

# ์ตœ๋Œ€/์ตœ์†Œ
dates = [
datetime(2025, 11, 27),
datetime(2025, 12, 25),
datetime(2025, 1, 1),
]

print(f'๊ฐ€์žฅ ์ด๋ฅธ ๋‚ ์งœ: {min(dates)}')
print(f'๊ฐ€์žฅ ๋Šฆ์€ ๋‚ ์งœ: {max(dates)}')

Hรคufig gestellte Fragen โ“โ€‹

Q1: ์›”๋ง ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” Methode์€?โ€‹

from datetime import datetime
from calendar import monthrange

def get_last_day_of_month(year, month):
"""ํŠน์ • ์›”์˜ ๋งˆ์ง€๋ง‰ ๋‚ """
last_day = monthrange(year, month)[1]
return datetime(year, month, last_day)

# ์‚ฌ์šฉ Beispiel
last_day = get_last_day_of_month(2025, 2)
print(last_day) # 2025-02-28 (2025๋…„์€ ํ‰๋…„)

Q2: ๋‘ ์‹œ๊ฐ„์ด ๊ฐ™์€ ๋‚ ์ธ์ง€ ํ™•์ธํ•˜๋Š” Methode์€?โ€‹

from datetime import datetime

dt1 = datetime(2025, 11, 27, 9, 0, 0)
dt2 = datetime(2025, 11, 27, 18, 0, 0)

# ๋‚ ์งœ๋งŒ ๋น„๊ต
same_day = dt1.date() == dt2.date()
print(same_day) # True

Q3: ํŠน์ • ์š”์ผ์˜ ๋‚ ์งœ๋ฅผ ์ฐพ๋Š” Methode์€?โ€‹

from datetime import datetime, timedelta

def next_weekday(start_date, weekday):
"""๋‹ค์Œ ํŠน์ • ์š”์ผ ์ฐพ๊ธฐ (0=์›”, 6=์ผ)"""
days_ahead = weekday - start_date.weekday()
if days_ahead <= 0:
days_ahead += 7
return start_date + timedelta(days=days_ahead)

# ๋‹ค์Œ ๊ธˆ์š”์ผ ์ฐพ๊ธฐ
today = datetime.now()
next_friday = next_weekday(today, 4) # 4 = ๊ธˆ์š”์ผ
print(f'๋‹ค์Œ ๊ธˆ์š”์ผ: {next_friday.strftime("%Y-%m-%d")}')

Q4: ์‹œ๊ฐ„์„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” Methode์€?โ€‹

from datetime import datetime, timedelta

def round_time(dt, round_to_minutes=15):
"""์‹œ๊ฐ„์„ ํŠน์ • ๋ถ„ ๋‹จ์œ„๋กœ ๋ฐ˜์˜ฌ๋ฆผ"""
seconds = round_to_minutes * 60
rounded = dt + timedelta(seconds=seconds/2)
rounded -= timedelta(
seconds=rounded.second,
microseconds=rounded.microsecond
)
rounded -= timedelta(minutes=rounded.minute % round_to_minutes)
return rounded

# 15๋ถ„ ๋‹จ์œ„๋กœ ๋ฐ˜์˜ฌ๋ฆผ
now = datetime.now()
rounded = round_time(now, 15)
print(f'์›๋ณธ: {now.strftime("%H:%M:%S")}')
print(f'๋ฐ˜์˜ฌ๋ฆผ: {rounded.strftime("%H:%M:%S")}')

Q5: ISO 8601 ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Methode์€?โ€‹

from datetime import datetime

now = datetime.now()

# ISO ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
iso_string = now.isoformat()
print(iso_string) # 2025-11-27T14:30:45.123456

# ISO ํ˜•์‹์—์„œ ๋ณ€ํ™˜
dt = datetime.fromisoformat('2025-11-27T14:30:45')
print(dt)

Performance-Tipps ๐Ÿš€โ€‹

from datetime import datetime
import time

# ํ˜„์žฌ ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ๋•Œ
# ๋‚˜์จ: ๋งค๋ฒˆ ํ˜ธ์ถœ
for i in range(1000):
now = datetime.now() # ๋งค๋ฒˆ ์‹œ์Šคํ…œ ํ˜ธ์ถœ

# ์ข‹์Œ: ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ
now = datetime.now()
for i in range(1000):
# now ์‚ฌ์šฉ
pass

Nรคchste Schritteโ€‹

  • JSON๊ณผ CSV: ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • ์ •๊ทœํ‘œํ˜„์‹: ๋‚ ์งœ ํ˜•์‹ ์ถ”์ถœ๊ณผ ๊ฒ€์ฆ
  • dateutil ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ๋” ๊ฐ•๋ ฅํ•œ ๋‚ ์งœ ํŒŒ์‹ฑ
  • arrow ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ์‚ฌ๋žŒ ์นœํ™”์ ์ธ ๋‚ ์งœ ์ฒ˜๋ฆฌ