【Streamlit】日付と時刻の入力:st.date_input, st.time_input

Streamlit
この記事は約7分で読めます。

こんにちは、JS2IIUです。
今回はStreamlit上で日付や時間を入力するのに便利な、日付選択カレンダーと時刻入力フィールドの使い方を見ていきたいと思います。今回もよろしくお願いします。

1. はじめに

こんにちは!今回は、Pythonで手軽にWebアプリを作成できる「Streamlit」で、日付時刻を入力する方法をご紹介します。

たとえば、予約フォームや日報アプリを作るとき、ユーザーに「日付」や「時間」を入力してもらいたい場面ってありますよね?
Streamlitには、そんな時に便利な st.date_input(日付選択)st.time_input(時刻入力) という機能があります。

2. st.date_input:日付選択カレンダーの使い方

✅ ステップ①:基本的な使い方

まずは、もっともシンプルな使い方を見てみましょう。

Python
import streamlit as st

st.title("日付の入力デモ")

# 日付を選ぶカレンダーを表示
date = st.date_input("日付を選んでください")

# 選んだ日付を表示
st.write("あなたが選んだ日付は:", date)

これを実行すると、日付選択カレンダーが表示され、選んだ日付が下に表示されます。

✅ ステップ②:デフォルト値を設定する

特定の日付を初期値として表示させることもできます。

Python
import datetime

default_date = datetime.date(2025, 1, 1)
date = st.date_input("日付を選んでください", value=default_date)

このように、value引数で初期日付を指定できます。
datetime.date(年, 月, 日)の形式で日付を設定します。

✅ ステップ③:入力可能な日付の範囲を制限する

ユーザーが選べる日付を制限したい場合は、min_valuemax_valueを使います。

Python
today = datetime.date.today()
date = st.date_input(
    "日付を選んでください",
    min_value=today,
    max_value=today + datetime.timedelta(days=30)
)

この例では、今日から30日後までの日付だけが選べるようになります。

✅ ステップ④:複数日を選ぶ(期間選択)

st.date_inputは、リスト形式で初期値を渡すことで開始日と終了日を選ぶUIにもなります。

Python
start_date = datetime.date(2025, 4, 1)
end_date = datetime.date(2025, 4, 7)

dates = st.date_input("期間を選んでください", [start_date, end_date])

if isinstance(dates, tuple):
    st.write("開始日:", dates[0])
    st.write("終了日:", dates[1])

3. st.time_input:時刻入力フィールドの使い方

✅ ステップ①:基本の使い方

時刻を選ばせるには、st.time_inputを使います。

Python
import datetime

time = st.time_input("時刻を選んでください")
st.write("あなたが選んだ時刻は:", time)

デフォルトでは、現在時刻(もしくは00:00)で表示されます。

✅ ステップ②:初期値を指定する

Python
default_time = datetime.time(9, 30)
time = st.time_input("時刻を選んでください", value=default_time)

datetime.time(時, 分)の形式で初期時刻を設定できます。

✅ ステップ③:時間の間隔(ステップ)を設定する

15分刻みや30分刻みで時刻を選ばせたいときは、step引数を使います。step引数にはtimedelta型を渡してください

Python
time = st.time_input("時刻を選んでください", step=datetime.timedelta(minutes=15))

4. 日付+時刻をセットで使うケース

よくあるのが、「日付と時刻をセットで1つの日時として使いたい」という場面です。

Streamlitでは、datetime.combineを使うことで、選んだ日付と時刻を1つのdatetimeオブジェクトにまとめることができます。

Python
from datetime import datetime

date = st.date_input("日付を選んでください")
time = st.time_input("時刻を選んでください")

datetime_value = datetime.combine(date, time)
st.write("選んだ日時:", datetime_value)

これで「2025-04-21 09:30:00」のような形で日時が扱えます。

5. よくあるエラー・注意点

🔸 ローカル時間の扱い

Streamlitは実行環境によってタイムゾーンの影響を受けることがあります。
特に時差のあるサーバー上で動かすときは注意が必要です。

🔸 型の違いに注意

  • st.date_inputdatetime.date
  • st.time_inputdatetime.time

型が違うため、直接足したり比較したりはできません。datetime.combineを使って統一しましょう。

6. まとめ

今回は、Streamlitの st.date_inputst.time_input の使い方について、以下のポイントを解説しました:

  • 日付選択と時刻入力の基本的な使い方
  • 初期値や範囲の指定方法
  • 日付と時刻を組み合わせて1つの日時にする方法

これらを使えば、予約フォームや日程調整アプリなど、さまざまな場面で活用できます。
とても便利なので、ぜひ自分のアプリにも取り入れてみてください!

7. おまけ:st.formと組み合わせて使う

より実践的な使い方として、st.formを使うとボタンを押してから送信するフォーム形式にもできます。

Python
with st.form("予約フォーム"):
    date = st.date_input("予約日を選んでください")
    time = st.time_input("開始時刻を選んでください")
    submitted = st.form_submit_button("送信")

    if submitted:
        st.write(f"予約日時:{datetime.combine(date, time)}")

これで、ユーザーが日付と時間を選んで「送信」を押したときにだけ処理が走るようになります。

8. 参考リンク

最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

コメント

タイトルとURLをコピーしました