C.W.K.
Stream
Lesson 04 of 12 · published

날짜와 시간 패턴

~8 min · date, time, iso8601

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

ISO 8601 — canonical 포맷

포맷 통제할 때 항상 YYYY-MM-DD 와 ISO 8601 타임스탬프 선호. 정규식이 trivial:

  • 날짜: \d{4}-\d{2}-\d{2}
  • 시간: \d{2}:\d{2}:\d{2}
  • 날짜시간: \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?

흔한 모호한 포맷

05/04/2026: 5월 4일 (US) 인가 4월 5일 (대부분 세계) 인가? 정규식이 못 알려줘. 모호한 포맷 받지 마. ISO 8601 강제, 또는 명시적으로 여러 모호하지 않은 포맷 받기.

꼭 다양한 포맷 파싱해야 한다면 패턴 여러 개 작성 후 순서대로 시도:

1. ISO: \d{4}-\d{2}-\d{2}
2. US 슬래시: \d{1,2}/\d{1,2}/\d{4}
3. EU 점: \d{1,2}\.\d{1,2}\.\d{4}
4. Long: (Jan|Feb|...)\s+\d{1,2},?\s+\d{4}

검증 vs 파싱

정규식이 모양 매칭 알려줘. 날짜가 진짜인지 안 알려줘. 2026-02-30 가 패턴 매칭하지만 2월 30일 존재 X. 진짜 검증: Python 의 datetime.strptime(s, fmt), JS 의 new Date(s) (그 다음 !isNaN 체크), Go 의 time.Parse.

산문에서 날짜 추출

"이 단락의 날짜 찾기" 면 anchor 된 alternation: \b(\d{4}-\d{2}-\d{2}|\d{1,2}/\d{1,2}/\d{4})\b. 보수적으로 — 날짜 추출의 false positive 흔함.

Code

날짜 패턴·python
import re
from datetime import datetime

# ISO 날짜 검증
DATE_ISO = re.compile(r'^\d{4}-\d{2}-\d{2}$')
bool(DATE_ISO.fullmatch('2026-05-04'))   # True
bool(DATE_ISO.fullmatch('2026/05/04'))   # False

# 검증 + 파싱
def parse_iso_date(s):
    if not DATE_ISO.fullmatch(s):
        return None
    try:
        return datetime.strptime(s, '%Y-%m-%d').date()
    except ValueError:
        return None  # 2월 30 등 잡음

parse_iso_date('2026-05-04')  # date(2026, 5, 4)
parse_iso_date('2026-02-30')  # None — 모양 OK, 값 invalid

# 풀 ISO 날짜시간 + 타임존
DT_ISO = re.compile(
    r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$'
)
bool(DT_ISO.fullmatch('2026-05-04T14:32:11Z'))            # True
bool(DT_ISO.fullmatch('2026-05-04T14:32:11.123+09:00'))   # True

# 산문에서 날짜 찾기
DATE_FIND = re.compile(r'\b\d{4}-\d{2}-\d{2}\b')
re.findall(DATE_FIND, 'logged on 2026-05-04 and 2026-05-05')
# ['2026-05-04', '2026-05-05']

External links

Exercise

본인 코드에서 날짜 패턴 잡기. 2026-13-012026-02-30 에 테스트. 첫 거는 invalid 월, 두 번째 invalid 일. 정규식이 잡나, 실제 datetime.strptime 호출이 일하나? 정규식이 더 엄격해야 할지 검증으로 충분한지 결정.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.