5.5. Datetime Format¶
format(dt, '%Y-%m-%d')
f'Today is {dt:%Y-%m-%d}'
dt.strftime('%Y-%m-%d')
5.5.1. Formats¶
format(dt, '%Y-%m-%d')
>>> from datetime import datetime
>>>
>>>
>>> dt = datetime(1961, 4, 12, 6, 7)
>>>
>>> format(dt, '%Y')
'1961'
>>>
>>> format(dt, '%Y-%m-%d')
'1961-04-12'
>>>
>>> format(dt, '%d.%m.%Y')
'12.04.1961'
>>>
>>> format(dt, '%H:%M')
'06:07'
>>>
>>> format(dt, '%Y-%m-%d %H:%M')
'1961-04-12 06:07'
>>>
>>> format(dt, '%Y-%m-%d %H:%M:%S')
'1961-04-12 06:07:00'
>>>
>>> format(dt, '%B %d, %Y')
'April 12, 1961'
5.5.2. Leading Zero¶
%#H
- remove leading zero (Windows)%-H
- remove leading zero (macOS, Linux, *nix)%_H
- replace leading zero with space (macOS, Linux, *nix)Works only with formatting
raises ValueError while parsing [1]
On Linux and *nix systems:
>>> from datetime import datetime
>>>
>>>
>>> dt = datetime(1961, 4, 12, 6, 7)
>>>
>>> format(dt, '%H:%M')
'06:07'
>>>
>>> format(dt, '%-H:%M')
'6:07'
>>>
>>> format(dt, '%_H:%M')
' 6:07'
>>>
>>> format(dt, '%#H:%M')
'06:07'
On macOS:
>>> from datetime import datetime
>>>
>>>
>>> dt = datetime(1961, 4, 12, 6, 7)
>>>
>>> format(dt, '%H:%M')
'06:07'
>>>
>>> format(dt, '%-H:%M')
'6:07'
>>>
>>> format(dt, '%#H:%M')
'#H:07'
On Windows 10:
>>> from datetime import datetime
>>>
>>>
>>> dt = datetime(1961, 4, 12, 6, 7)
>>>
>>> format(dt, '%H:%M')
'06:07'
>>>
>>> format(dt, '%-H:%M')
Traceback (most recent call last):
ValueError: Invalid format string
>>>
>>> format(dt, '%_H:%M')
Traceback (most recent call last):
ValueError: Invalid format string
>>>
>>> format(dt, '%#H:%M')
'6:07'
Meaning |
With |
Without (macOS, Linux) |
Without (Windows) |
---|---|---|---|
day |
|
|
|
hour 24h |
|
|
|
hour 12h |
|
|
|
day of a year |
|
|
|
month |
|
|
|
minute |
|
|
|
second |
|
|
|
week number (Sunday first) |
|
|
|
week number (Monday first) |
|
|
|
weekday (Sunday first) |
|
|
|
year short |
|
|
|
year long |
|
|
|
5.5.3. String Format Time¶
datetime.strftime()
>>> from datetime import datetime
>>>
>>>
>>> gagarin = datetime(1961, 4, 12, 6, 7)
>>> formatted = gagarin.strftime('%Y-%m-%d %H:%M')
>>>
>>> print(f'Gagarin launched on {formatted}')
Gagarin launched on 1961-04-12 06:07
5.5.4. Format String¶
>>> from datetime import datetime
>>>
>>>
>>> gagarin = datetime(1961, 4, 12, 6, 7)
>>>
>>> print(f'Gagarin launched on {gagarin:%Y-%m-%d}')
Gagarin launched on 1961-04-12
>>>
>>> print(f'Gagarin launched on {gagarin:%Y-%m-%d %H:%M}')
Gagarin launched on 1961-04-12 06:07
>>> from datetime import datetime
>>>
>>>
>>> gagarin = datetime(1961, 4, 12, 6, 7)
>>> format = '%Y-%m-%d %H:%M'
>>>
>>> print(f'Gagarin launched on {gagarin:{format}}')
Gagarin launched on 1961-04-12 06:07
5.5.5. References¶
5.5.6. Assignments¶
"""
* Assignment: Datetime Format ISO-8601
* Complexity: easy
* Lines of code: 1 lines
* Time: 3 min
English:
1. Define `result: str` with `DATA` in ISO-8601 format
2. Do not use `datetime.isoformat()` method
2. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` w formacie ISO-8601
2. Nie używaj metody `datetime.isoformat()`
3. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert type(result) is str, \
'Variable `result` has invalid type, must be a str'
>>> result
'1969-07-21 02:56:15'
"""
from datetime import datetime
DATA = datetime(1969, 7, 21, 2, 56, 15)
# DATA in ISO-8601 format: '1969-07-21 02:56:15'
# type: str
result = ...
"""
* Assignment: Datetime Format US
* Complexity: easy
* Lines of code: 1 lines
* Time: 3 min
English:
1. Define `result: str` with `DATA` in long US format
2. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` w długim formacie amerykańskim
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from pathlib import Path
>>> content = Path(__file__).read_text()
>>> assert '%'+'-H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'_H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'#H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'I' in content, \
'Use %I for 12-hour clock'
>>> assert '%'+'p' in content, \
'Use %p for AM/PM'
>>> result
'July 21, 1969 02:56:15 AM'
"""
from datetime import datetime
DATA = datetime(1969, 7, 21, 2, 56, 15)
# DATA in long US format: 'July 21, 1969 02:56:15 AM'
# type: str
result = ...
"""
* Assignment: Datetime Format LeadingZero
* Complexity: easy
* Lines of code: 1 lines
* Time: 3 min
English:
1. Define `result: str` with `DATA` in short US format
2. Make sure, that month, day and hour are without leading zero
3. Run doctests - all must succeed
Polish:
1. Zdefiniuj `result: str` z `DATA` w krótkim formacie amerykańskim
2. Upewnij się, że miesiąc, dzień i godzina jest bez wiodącego zera
3. Uruchom doctesty - wszystkie muszą się powieść
Hints:
* Use `%-I` on *nix systems (macOS, BSD, Linux)
* Use `%#I` on Windows
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> from pathlib import Path
>>> content = Path(__file__).read_text()
>>> assert '%'+'-H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'_H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'#H' not in content, \
'%H is used for 24-hour clock, use %I instead'
>>> assert '%'+'-I' in content or '%'+'_I' in content, \
'Use %I for 12-hour clock'
>>> assert '%'+'p' in content, \
'Use %p for AM/PM'
>>> assert type(result) is str, \
'Variable `result` has invalid type, must be a str'
>>> result
'7/21/69 2:56 AM'
"""
from datetime import datetime
DATA = datetime(1969, 7, 21, 2, 56, 15)
# DATA in short US format: '7/21/69 2:56 AM'
# type: str
result = ...