CodeGym /์ž๋ฐ” ์ฝ”์Šค /Python SELF KO /์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ ๋ฐ ๋ถ„์„ ๋ณด๊ณ ์„œ์—์„œ์˜ ํ™œ์šฉ

์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ ๋ฐ ๋ถ„์„ ๋ณด๊ณ ์„œ์—์„œ์˜ ํ™œ์šฉ

Python SELF KO
๋ ˆ๋ฒจ 40 , ๋ ˆ์Šจ 4
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1. ์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ: ์™œ ํ•„์š”ํ• ๊นŒ?

์•„๋ฌด๋ฆฌ ์ •๋ฐ€ํ•จ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•ด๋„, ์‹œ๊ฐ„์ด ํ•„์š” ์ด์ƒ์œผ๋กœ ์ •ํ™•ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ. ๋ง‰๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋ถ„์„ํ•˜๊ณ  ์žˆ๊ณ , ๋งค ์ดˆ๋งˆ๋‹ค ์ค‘์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋ ‡์ง€๋งŒ ๋ณด๊ณ ์„œ์—์„œ ๋ช‡ ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜๋‰œ ๋ถ„์„์ด ์ •๋ง ํ•„์š”ํ• ๊นŒ? ์ถฉ๋ถ„ํžˆ ๋ถ„ ๋‹จ์œ„ ๋˜๋Š” ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ๋„ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„. ์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋ฉด์„œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜.

์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ์˜ ํ™œ์šฉ ์‚ฌ๋ก€:

  • ์‹œ๊ณ„์—ด ๋ถ„์„: ๋ช‡ ์ฃผ๋‚˜ ๋ช‡ ๋‹ฌ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ๋•Œ ์ดˆ ๋‹จ์œ„๋‚˜ ๋ถ„ ๋‹จ์œ„๊นŒ์ง€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์–ด. ์‹œ๊ฐ„ ๋‹จ์œ„๋‚˜ ์ผ ๋‹จ์œ„๋กœ ์ถฉ๋ถ„ํ•˜์ง€.
  • ๋ณด๊ณ ์„œ ์ƒ์„ฑ: ๋ณด๊ณ ์„œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„์ด๋‚˜ ๋‚ ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ฉด ํ›จ์”ฌ ์ง๊ด€์ ์ด์•ผ.
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ด๋ฉด ๋ถ„์„ ์†๋„๊ฐ€ ์ƒ๋‹นํžˆ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด.

2. Python์—์„œ ์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋ฐฉ๋ฒ•?

Python์€ ์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ ์ž‘์—…์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ œ๊ณตํ•ด์ค˜. ์ด ๋•Œ datetime ํด๋ž˜์Šค์™€ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ผ.

๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ„ ๋˜๋Š” ์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ

์šฐ์„ , ์‹œ๊ฐ„ ๊ฐ์ฒด๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณผ๊ฒŒ:

Python
from datetime import datetime, timedelta

# ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž
now = datetime.now()

# ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 10๋ถ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ
def round_time_to_nearest_minute(dt, interval):
    discard = timedelta(minutes=dt.minute % interval,
                        seconds=dt.second,
                        microseconds=dt.microsecond)
    dt -= discard
    if discard >= timedelta(minutes=interval/2):
        dt += timedelta(minutes=interval)
    return dt

rounded_time = round_time_to_nearest_minute(now, 10)
print(f"ํ˜„์žฌ ์‹œ๊ฐ„: {now}")
print(f"๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 10๋ถ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋œ ์‹œ๊ฐ„: {rounded_time}")
    
    

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” timedelta ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๊ฒฉ์„ ๊ด€๋ฆฌํ•ด. ์ด ํ•จ์ˆ˜ round_time_to_nearest_minute๋Š” ์‹œ๊ฐ„์„ 10๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•  ์ˆ˜ ์žˆ์–ด. ๋‹ค๋ฅธ ๊ฐ„๊ฒฉ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ผ.

๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ

์ด๋ฒˆ์—๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์•ผ. ์ด์ „ ์˜ˆ์ œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์–ด:

Python

# ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ
def round_time_to_nearest_hour(dt):
    discard = timedelta(minutes=dt.minute % 60,
                        seconds=dt.second,
                        microseconds=dt.microsecond)
    dt -= discard
    if discard >= timedelta(minutes=30):
        dt += timedelta(hours=1)
    return dt

rounded_hour = round_time_to_nearest_hour(now)
print(f"๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋œ ์‹œ๊ฐ„: {rounded_hour}")
    
    

3. ๋ณด๊ณ ์„œ์™€ ๋ฐ์ดํ„ฐ ๋ถ„์„์—์„œ์˜ ์‹ค์ œ ํ™œ์šฉ ์‚ฌ๋ก€

๋ฐ˜์˜ฌ๋ฆผ๋œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์ด ํ™•๋ณด๋˜์—ˆ์œผ๋‹ˆ, ์ด ๊ธฐ์ˆ ๋“ค์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์–˜๊ธฐํ•ด๋ณด์ž.

์˜ˆ์ œ 1: ์ž‘์—… ์‹œ๊ฐ„ ๋ณด๊ณ ์„œ

์˜ˆ๋ฅผ ๋“ค์–ด ๊ทผ๋ฌด ์‹œ๊ฐ„ ๊ธฐ๋ก ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด. ๊ทผ๋ฌด ์‹œ๊ฐ„์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 15๋ถ„ ๋‹จ์œ„๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ฉด ๊ณ„์‚ฐ์ด ๋‹จ์ˆœํ™”๋ผ์„œ ๋ณด๊ณ ์„œ ์ƒ์„ฑ์ด๋‚˜ ๊ธ‰์—ฌ ๊ณ„์‚ฐ์— ์œ ์šฉํ•  ๊ฑฐ์•ผ.

Python
# ๊ทผ๋ฌด ์‹œ๊ฐ„ ๊ธฐ๋ก์šฉ ์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜
def round_time_for_work_log(dt, interval=15):
    return round_time_to_nearest_minute(dt, interval)

start_time = datetime.strptime('08:05:30', '%H:%M:%S')
end_time = datetime.strptime('17:38:45', '%H:%M:%S')

rounded_start_time = round_time_for_work_log(start_time)
rounded_end_time = round_time_for_work_log(end_time)

print(f"์‹œ์ž‘ ์‹œ๊ฐ„: {rounded_start_time.time()}")
print(f"์ข…๋ฃŒ ์‹œ๊ฐ„: {rounded_end_time.time()}")
    
    

์˜ˆ์ œ 2: ์‚ฌ์šฉ์ž ํ™œ๋™ ๋ถ„์„

์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž ํ™œ๋™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด. ์‹œ๊ฐ„์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ฉด ๊ณผ๋„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผํ•˜๋ฉด์„œ๋„ ๋ณด๊ณ ์„œ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด.

Python

    # ์‚ฌ์šฉ์ž ํ™œ๋™ ํƒ€์ž„์Šคํƒฌํ”„ ๋ฐ˜์˜ฌ๋ฆผ
user_activity = [
    datetime(2023, 10, 15, 14, 22), 
    datetime(2023, 10, 15, 14, 47), 
    datetime(2023, 10, 15, 15, 5)
]

rounded_activity = [round_time_to_nearest_hour(activity) for activity in user_activity]
print("์‚ฌ์šฉ์ž ํ™œ๋™ ํƒ€์ž„์Šคํƒฌํ”„ ๋ฐ˜์˜ฌ๋ฆผ:", rounded_activity)
    
    

์‹œ๊ณ„์—ด ๋ถ„์„ ๊ฐ„์†Œํ™”

๋ชจ๋“  ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„์— ๋„ฃ์–ด๋ณด๋ฉด, ๋ฐ˜์˜ฌ๋ฆผ์ด ์–ผ๋งˆ๋‚˜ ๋ถ„์„์„ ๊ฐ„์†Œํ™”ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋  ๊ฑฐ์•ผ. ๊ทธ๋ž˜ํ”„๋Š” ๋œ ๋ณต์žกํ•ด์ง€๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ ์ดํ•ด๋„ ๋” ์‰ฌ์›Œ์งˆ ๊ฑฐ์•ผ.

๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์‹œ๊ฐ„ ๋ฐ˜์˜ฌ๋ฆผ ์ž‘์—… ์ค‘์— ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ์–ด. ๊ทธ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜์˜ฌ๋ฆผ ์ˆœ์„œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•˜๋Š” ๊ฒฝ์šฐ์•ผ. ํ•ญ์ƒ ๊ฐ„๊ฒฉ๊ณผ ์‹œ๊ฐ„ ํ˜•์‹์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋„๋ก ์‹ ๊ฒฝ ์จ์•ผ ํ•ด.

timedelta๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ„๊ฒฉ์„ ๊ณ„์‚ฐํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ํ˜•์‹์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด.

1
ะžะฟั€ะพั
schedule ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์—…,ย  40 ัƒั€ะพะฒะตะฝัŒ,ย  4 ะปะตะบั†ะธั
ะฝะตะดะพัั‚ัƒะฟะตะฝ
schedule ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์—…
schedule ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์—…
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION