1. ์๊ฐ ๋ฐ์ฌ๋ฆผ: ์ ํ์ํ ๊น?
์๋ฌด๋ฆฌ ์ ๋ฐํจ์ด ์ค์ํ๋ค๊ณ ํด๋, ์๊ฐ์ด ํ์ ์ด์์ผ๋ก ์ ํํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ด. ์๋ฅผ ๋ค์ด๋ณผ๊ฒ. ๋ง๋ํ ๋ฐ์ดํฐ ์งํฉ์ ๋ถ์ํ๊ณ ์๊ณ , ๋งค ์ด๋ง๋ค ์ค์ํ ์ํฉ์ด๋ผ๊ณ ํด๋ณด์. ๊ทธ๋ ์ง๋ง ๋ณด๊ณ ์์์ ๋ช ์ด ๋จ์๋ก ๋๋ ๋ถ์์ด ์ ๋ง ํ์ํ ๊น? ์ถฉ๋ถํ ๋ถ ๋จ์ ๋๋ ์๊ฐ ๋จ์๋ก๋ ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ๋ง์. ์๊ฐ ๋ฐ์ฌ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ํํ๊ณ ๋ ๋ช ํํ๊ฒ ํ๋ฉด์ ์ค์ํ ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๊ฒ ํด์ค.
์๊ฐ ๋ฐ์ฌ๋ฆผ์ ํ์ฉ ์ฌ๋ก:
- ์๊ณ์ด ๋ถ์: ๋ช ์ฃผ๋ ๋ช ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ๋ ์ด ๋จ์๋ ๋ถ ๋จ์๊น์ง ํ์ํ์ง ์์ ์๋ ์์ด. ์๊ฐ ๋จ์๋ ์ผ ๋จ์๋ก ์ถฉ๋ถํ์ง.
- ๋ณด๊ณ ์ ์์ฑ: ๋ณด๊ณ ์๋ฅผ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ์ด๋ ๋ ๋ก ๋ฐ์ฌ๋ฆผํ๋ฉด ํจ์ฌ ์ง๊ด์ ์ด์ผ.
- ์ฑ๋ฅ ์ต์ ํ: ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค์ด๋ฉด ๋ถ์ ์๋๊ฐ ์๋นํ ๋นจ๋ผ์ง ์ ์์ด.
2. Python์์ ์๊ฐ ๋ฐ์ฌ๋ฆผํ๋ ๋ฐฉ๋ฒ?
Python์ ์๊ฐ ๋ฐ์ฌ๋ฆผ ์์
์ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ผ๋ก ์ ๊ณตํด์ค. ์ด ๋ datetime
ํด๋์ค์ ๊ด๋ จ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋ผ.
๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ ๋๋ ์๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผ
์ฐ์ , ์๊ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ์ผ๋ก ๋ฐ์ฌ๋ฆผํ๋ ๋ฐฉ๋ฒ์ ๋ณผ๊ฒ:
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๋ถ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ์ฌ๋ฆผํ ์ ์์ด. ๋ค๋ฅธ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ผ.
๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผ
์ด๋ฒ์๋ ์๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ ๋จ์๋ก ๋ฐ์ฌ๋ฆผํ๋ ๋ฐฉ๋ฒ์ด์ผ. ์ด์ ์์ ์ ๋น์ทํ์ง๋ง ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ด:
# ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผ
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๋ถ ๋จ์๋ก ๋ฐ์ฌ๋ฆผํ๋ฉด ๊ณ์ฐ์ด ๋จ์ํ๋ผ์ ๋ณด๊ณ ์ ์์ฑ์ด๋ ๊ธ์ฌ ๊ณ์ฐ์ ์ ์ฉํ ๊ฑฐ์ผ.
# ๊ทผ๋ฌด ์๊ฐ ๊ธฐ๋ก์ฉ ์๊ฐ ๋ฐ์ฌ๋ฆผ ํจ์
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: ์ฌ์ฉ์ ํ๋ ๋ถ์
์น์ฌ์ดํธ์์ ์ฌ์ฉ์ ํ๋์ ๋ชจ๋ํฐ๋งํ๋ค๊ณ ๊ฐ์ ํด๋ด. ์๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ์ผ๋ก ๋ฐ์ฌ๋ฆผํ๋ฉด ๊ณผ๋ํ ๋ฐ์ดํฐ๋ฅผ ํผํ๋ฉด์๋ ๋ณด๊ณ ์๋ฅผ ๋ ๋ช ํํ๊ฒ ํํํ ์ ์์ด.
# ์ฌ์ฉ์ ํ๋ ํ์์คํฌํ ๋ฐ์ฌ๋ฆผ
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
๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ๋์ง ํ์ธํ๊ณ ๋ฐ์ดํฐ ์
๋ ฅ ํ์์ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง ํ์ธํ๋ฉด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ด.
GO TO FULL VERSION