ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] datetime + time: 날짜·시간 처리 베스트 프랙티스
    업무 자동화/Python 2025. 12. 5. 13:29

    1. datetime 기본

    from datetime import datetime, date, time, timedelta

    1-1. 현재 날짜와 시각

    from datetime import datetime, date
    
    now = datetime.now()
    today = date.today()
    
    print(now)    # 2025-12-02 13:45:00.123456
    print(today)  # 2025-12-02

    1-2. 특정 날짜/시간 만들기

    from datetime import datetime, date, time
    
    d = date(2025, 12, 25)
    t = time(14, 30, 0)
    dt = datetime(2025, 12, 25, 14, 30, 0)

    2. 날짜/시간 덧셈·뺄셈: timedelta

    from datetime import datetime, timedelta
    
    now = datetime.now()
    tomorrow = now + timedelta(days=1)
    one_hour_ago = now - timedelta(hours=1)
    
    print(tomorrow)
    print(one_hour_ago)

    주요 인자:

    • days, seconds, microseconds
    • milliseconds, minutes, hours, weeks

    예시: 비밀번호 만료 일자 계산

    from datetime import datetime, timedelta
    
    created_at = datetime.now()
    expire_at = created_at + timedelta(days=90)
    
    print("만료일:", expire_at)

    3. 문자열 ↔ datetime 변환 (포맷팅/파싱)

    3-1. datetime → 문자열: strftime

    from datetime import datetime
    
    now = datetime.now()
    
    print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 2025-12-02 13:45:30
    print(now.strftime("%Y%m%d"))             # 20251202
    print(now.strftime("%Y-%m-%d(%a)"))       # 2025-12-02(Tue)

    자주 쓰는 포맷 코드:

    • %Y : 4자리 연도 (2025)
    • %m : 2자리 월 (01~12)
    • %d : 2자리 일 (01~31)
    • %H : 24시간제 시각 (00~23)
    • %M : 분 (00~59)
    • %S : 초 (00~59)
    • %a : 요일 약어 (Mon, Tue, ...)

    3-2. 문자열 → datetime: strptime

    from datetime import datetime
    
    s = "2025-12-02 13:45:30"
    dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
    print(dt, type(dt))
    • 문자열 포맷과 strptime 포맷 문자열이 정확히 일치해야 합니다.

    4. timestamp(UNIX 시간) 다루기

    4-1. datetime → timestamp

    from datetime import datetime
    
    now = datetime.now()
    ts = now.timestamp()
    
    print(ts)  # 예: 1764657930.123456

    4-2. timestamp → datetime

    from datetime import datetime
    
    ts = 1764657930
    dt = datetime.fromtimestamp(ts)
    print(dt)
    • timestamp는 보통 UTC 기준 초 단위 부동소수점

    5. time 모듈: sleep, 실행 시간 측정

    import time
    
    print(time.time())  # 현재 시각(UNIX timestamp, float 초)

    5-1. sleep – 특정 시간 대기

    import time
    
    print("시작")
    time.sleep(2)    # 2초 대기
    print("끝")

    5-2. 실행 시간 측정

    import time
    
    start = time.perf_counter()
    
    # 실행하고 싶은 코드
    total = 0
    for i in range(1_000_000):
        total += i
    
    end = time.perf_counter()
    print("실행 시간:", end - start, "초")
    • perf_counter() : 성능 측정용 고해상도 타이머

    6. 실무 예시

    6-1. 날짜 기반 로그 파일 이름 만들기

    from datetime import datetime
    from pathlib import Path
    
    today = datetime.now().strftime("%Y%m%d")
    log_dir = Path("logs")
    log_dir.mkdir(exist_ok=True)
    
    log_path = log_dir / f"app_{today}.log"
    print("로그 파일:", log_path)

    6-2. N일 이상 지난 파일 삭제

    from datetime import datetime, timedelta
    from pathlib import Path
    
    days = 30
    threshold = datetime.now() - timedelta(days=days)
    
    log_dir = Path("logs")
    
    for path in log_dir.glob("*.log"):
        mtime = datetime.fromtimestamp(path.stat().st_mtime)
        if mtime < threshold:
            print("삭제:", path)
            path.unlink()

    6-3. “남은 시간” 표시

    from datetime import datetime, timedelta
    
    deadline = datetime(2025, 12, 31, 23, 59, 59)
    now = datetime.now()
    
    remain = deadline - now
    print("남은 일수:", remain.days)
    print("총 남은 초:", remain.total_seconds())
Designed by Tistory.