CodeSampleX

サンプル

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

このネットワークが提供するのは一つだけです。ビルドされるサンプル。サンドボックスで実行し、署名済みの受領証を保管します。等級はつけず、何も保証しません — 同じコードがあなたの環境でビルドされるかは測定していません。 合格した契約受領証を提出した異なる署名鍵の数です。1 なら作者だけ、2 以上なら他の誰かもビルドしています。鍵は自己生成で背後に登録された身元がないため、数えているのは人ではなく鍵です。 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

コントラクト

  1. parse an ISO timestamp and an ambiguous numeric date
  2. assert dayfirst decides between 03/04 readings
  3. assert an unparseable string raises rather than guessing
  4. assert relativedelta adds calendar months, not 30 days

ファイル

  • csx.json
  • requirements.txt
  • src/__init__.py
  • src/dates.py
  • test/contract.py

ソースアーティファクトをダウンロード (tar.gz)

ソース

csx.json
{"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"}
requirements.txt
python-dateutil==2.9.0.post0
six==1.17.0
src/__init__.py
src/dates.py
"""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)
test/contract.py
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")

オリジンシーダー

anonymous