日付時刻
Pythonのdatetime
として、_CLIパラメータ_を指定できます。
関数は標準のPython datetime
オブジェクトを受け取り、再び、エディターは補完などを提供します。
from datetime import datetime
import typer
def main(birth: datetime):
print(f"Interesting day to be born: {birth}")
print(f"Birth hour: {birth.hour}")
if __name__ == "__main__":
typer.run(main)
Typerは次の形式の文字列を受け入れます
%Y-%m-%d
%Y-%m-%dT%H:%M:%S
%Y-%m-%d %H:%M:%S
確認してください
$ python main.py --help
Usage: main.py [OPTIONS] BIRTH:[%Y-%m-%d|%Y-%m-%dT%H:%M:%S|%Y-%m-%d %H:%M:%S]
Arguments:
BIRTH:[%Y-%m-%d|%Y-%m-%dT%H:%M:%S|%Y-%m-%d %H:%M:%S][required]
Options:
--help Show this message and exit.
// Pass a datetime
$ python main.py 1956-01-31T10:00:00
Interesting day to be born: 1956-01-31 10:00:00
Birth hour: 10
// An invalid date
$ python main.py july-19-1989
Usage: main.py [OPTIONS] [%Y-%m-%d|%Y-%m-%dT%H:%M:%S|%Y-%m-%d%H:%M:%S]
Error: Invalid value for 'BIRTH:[%Y-%m-%d|%Y-%m-%dT%H:%M:%S|%Y-%m-%d %H:%M:%S]': 'july-19-1989' does not match the formats '%Y-%m-%d', '%Y-%m-%dT%H:%M:%S', '%Y-%m-%d %H:%M:%S'.
カスタム日付フォーマット¶
formats
パラメータを使用して、datetime
で受け取る形式をカスタマイズすることもできます。
formats
は、datetime.strptime()に渡される日付形式の文字列リストを受け取ります。
たとえば、ISO形式の日付時刻を受け入れたいが、何らかの奇妙な理由で、
- 最初に月、
- 次に日、
- 次に年、
- を "
/
" で区切った形式も受け入れたいとします。
...これは突飛な例ですが、その奇妙な形式も必要だとしましょう。
from datetime import datetime
import typer
from typing_extensions import Annotated
def main(
launch_date: Annotated[
datetime,
typer.Argument(
formats=["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S", "%m/%d/%Y"]
),
],
):
print(f"Launch will be at: {launch_date}")
if __name__ == "__main__":
typer.run(main)
ヒント
可能な場合は、注釈付きバージョンを使用することをお勧めします。
from datetime import datetime
import typer
def main(
launch_date: datetime = typer.Argument(
..., formats=["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S", "%m/%d/%Y"]
),
):
print(f"Launch will be at: {launch_date}")
if __name__ == "__main__":
typer.run(main)
ヒント
formats
の最後の文字列"%m/%d/%Y"
に注目してください。
確認してください
// ISO dates work
$ python main.py 1969-10-29
Launch will be at: 1969-10-29 00:00:00
// But the strange custom format also works
$ python main.py 10/29/1969
Launch will be at: 1969-10-29 00:00:00