import datetime
assert datetime.datetime(2024, 6, 15, 10, 30, 45).strftime('%Y-%m-%d') == '2024-06-15'
assert datetime.datetime(2024, 6, 15, 10, 30, 45).strftime('%H:%M:%S') == '10:30:45'
assert datetime.date(2024, 6, 15).strftime('%Y/%m/%d') == '2024/06/15'
assert datetime.date(2024, 6, 15).strftime(format='%Y/%m/%d') == '2024/06/15'
assert datetime.datetime.strptime('2024-06-15 10:30:45.1', '%Y-%m-%d %H:%M:%S.%f') == datetime.datetime(
2024, 6, 15, 10, 30, 45, 100000
)
try:
datetime.date(2024, 6, 15).strftime()
assert False, 'expected strftime() with no args to fail'
except TypeError as exc:
assert str(exc) == "strftime() missing required argument 'format' (pos 1)", f'strftime() no-args: {exc}'
try:
datetime.date(2024, 6, 15).strftime('%Y', '%m')
assert False, 'expected strftime() with extra positional to fail'
except TypeError as exc:
assert str(exc) == 'strftime() takes at most 1 argument (2 given)', f'strftime() extra positional: {exc}'
try:
datetime.date(2024, 6, 15).strftime('%Y', extra='nope')
assert False, 'expected strftime() with unexpected kwarg to fail'
except TypeError as exc:
assert str(exc) == 'strftime() takes at most 1 argument (2 given)', f'strftime() unexpected kwarg: {exc}'
for bad, expected_type in (
(42, 'int'),
(None, 'None'),
(b'%Y', 'bytes'),
(1.5, 'float'),
(True, 'bool'),
([1, 2], 'list'),
({1: 2}, 'dict'),
((1, 2), 'tuple'),
):
try:
datetime.date(2024, 6, 15).strftime(bad)
assert False, f'expected strftime({bad!r}) to fail'
except TypeError as exc:
assert str(exc) == f'strftime() argument 1 must be str, not {expected_type}', (
f'strftime({bad!r}) wrong type: {exc}'
)
try:
datetime.date(2024, 6, 15).strftime(format=bad)
assert False, f'expected strftime(format={bad!r}) to fail'
except TypeError as exc:
assert str(exc) == f'strftime() argument 1 must be str, not {expected_type}', (
f'strftime(format={bad!r}) wrong type: {exc}'
)
try:
datetime.datetime(2024, 6, 15).strftime(42)
assert False, 'expected datetime.strftime(42) to fail'
except TypeError as exc:
assert str(exc) == 'strftime() argument 1 must be str, not int', f'datetime.strftime wrong type: {exc}'
_d = datetime.date(2024, 6, 15)
_dt = datetime.datetime(2024, 6, 15, 10, 30, 45)
assert f'{_d:%Y-%m-%d}' == '2024-06-15'
assert f'{_dt:%Y-%m-%d %H:%M:%S}' == '2024-06-15 10:30:45'
assert f'{_dt:%Y-%m-%dT%H:%M}' == '2024-06-15T10:30'
assert f'{_d:Year %Y!}' == 'Year 2024!'
assert f'{_d}' == '2024-06-15'
assert f'{_dt}' == '2024-06-15 10:30:45'
_fmt = '%Y/%m/%d'
assert f'{_d:{_fmt}}' == '2024/06/15'
_empty = ''
assert f'{_dt:{_empty}}' == '2024-06-15 10:30:45'
assert f'{_d!s:>12}' == ' 2024-06-15'