샘플
python-dateutil 2.9.0.post0: Parse an ambiguous date string in Python without silently getting the wrong day
검증된 샘플 — pypi python-dateutil 2.9.0.post0: Parse an ambiguous date string in Python without silently getting the wrong day. python 3.12 · linux alpine/x64 …
sha256:ac8996a0194a777a7c8444b72c24f2f09fe9729cf3b7be94dcbb8422d0f59be2
이 네트워크가 제공하는 것은 하나입니다. 빌드되는 샘플. 샌드박스에서 돌리고 서명된 영수증을 보관합니다. 등급을 매기지 않고 무엇도 보증하지 않습니다 — 같은 코드가 당신 환경에서 빌드되는지는 측정한 적이 없습니다.
통과한 계약 영수증을 낸 서로 다른 서명 키의 수입니다. 하나면 작성자 혼자이고, 둘 이상이면 다른 사람도 빌드했다는 뜻입니다. 키는 스스로 만드는 것이고 뒤에 등록된 신원이 없으므로, 세는 것은 사람이 아니라 키입니다.
MIT-0
실행 증거
선언된 환경과 서명된 실행을 분리해 두었습니다. 이 샘플이 무엇을 어디서 실행했는지 그대로 볼 수 있습니다.
- 증거 기준
- 서명된 컨트랙트 통과
- 검증 영수증
- 3
- 빌드한 서명 키
- 3
선언된 환경
python 3.12 linux x64 python 3.12 python pip
검증 실행 환경
| 환경 | 컨트랙트 | 단계 | 실행일 |
|---|---|---|---|
| python 3.12 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · python@1 |
2026-08-13 |
| python 3.12 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · python@1 |
2026-08-17 |
| python 3.12 · linux debian/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · python@1python:3.12-slim@sha256:09f7da3bc104… |
2026-09-08 |
케이스
FIX- 목표
- Parse an ambiguous date string in Python without silently getting the wrong day
- 심벌
-
- dateutil.parser.parse
- relativedelta
- 환경
- python 3.12
- 생성일
- 2026-08-13T15:47:04Z
컨트랙트
- parse an ISO timestamp and an ambiguous numeric date
- assert dayfirst decides between 03/04 readings
- assert an unparseable string raises rather than guessing
- assert relativedelta adds calendar months, not 30 days
파일
- csx.json
- requirements.txt
- src/__init__.py
- src/dates.py
- test/contract.py
소스
{"case":{"caseId":"case:sha256:7a794c6818facb6f50920f4df838a9f76f5e53b2294fb1cc9dec5a52208b6a93","constraints":{"runtime":"python"},"contract":["parse an ISO timestamp and an ambiguous numeric date","assert dayfirst decides between 03/04 readings","assert an unparseable string raises rather than guessing","assert relativedelta adds calendar months, not 30 days"],"goal":"Parse an ambiguous date string in Python without silently getting the wrong day","kind":"FIX","packages":["pkg:pypi/python-dateutil@2.9.0.post0"],"schemaVersion":1,"symbols":["dateutil.parser.parse","relativedelta"]},"contractCommand":["python","test/contract.py"],"environment":{"arch":"x64","ecosystem":"pypi","executionContext":"python","language":"python","os":"linux","packageManager":"pip","runtime":"python","runtimeVersion":"3.12","schemaVersion":1},"license":"MIT-0","packages":["pkg:pypi/python-dateutil@2.9.0.post0"],"schemaVersion":1,"symbols":["dateutil.parser.parse","relativedelta"],"verifierAdapter":"python@1"}
python-dateutil==2.9.0.post0
six==1.17.0
"""Date parsing with dateutil, including the ambiguity nobody expects."""
from dateutil import parser
from dateutil.relativedelta import relativedelta
def parse(text, dayfirst=False):
"""Parse a date string.
"03/04/2026" is March 4th in the US reading and April 3rd elsewhere, and
dateutil picks the US one unless told otherwise. It is not a bug and it
will not warn — pass dayfirst explicitly whenever the input is not ISO.
"""
return parser.parse(text, dayfirst=dayfirst)
def add_months(dt, months):
"""Add calendar months. timedelta(days=30*n) drifts; relativedelta does not."""
return dt + relativedelta(months=months)
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.dates import add_months, parse
iso = parse("2026-08-13T09:05:00")
assert (iso.year, iso.month, iso.day, iso.hour) == (2026, 8, 13, 9)
# The ambiguity: same input, two readings, decided by dayfirst.
us = parse("03/04/2026")
eu = parse("03/04/2026", dayfirst=True)
assert (us.month, us.day) == (3, 4)
assert (eu.month, eu.day) == (4, 3)
try:
parse("definitely not a date")
except Exception:
pass
else:
raise AssertionError("unparseable input must raise, not guess")
# Calendar months: Jan 31 + 1 month is Feb 28, not March 2.
end_of_jan = parse("2026-01-31")
assert add_months(end_of_jan, 1).strftime("%Y-%m-%d") == "2026-02-28"
assert add_months(parse("2026-08-30"), 6).strftime("%Y-%m-%d") == "2027-02-28"
print("CONTRACT PASS: dateutil resolved the ambiguous date and month arithmetic")