Python で現在日時の取得,秒の切り捨て,日時の引き算
1. エグゼクティブサマリー
本記事では,Python の標準ライブラリ datetime を使用して,現在日時の取得,秒の切り捨て,日時の引き算を行う。タイムゾーンとして JST(日本標準時,UTC+9)を指定する。さらに,strftime メソッドによる書式指定表示と,2つの日時の差の計算も扱う。
2. 前準備(必要ソフトウェアの入手)
ここでは、最低限の事前準備について説明する。機械学習や深層学習を行う場合は、NVIDIA CUDA、Visual Studio、Cursorなどを追加でインストールすると便利である。これらについては別ページ https://www.kkaneko.jp/cc/dev/aiassist.htmlで詳しく解説しているので、必要に応じて参照してください。
Python 3.12 のインストール(Windows 上) [クリックして展開]
以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。
方法1:winget によるインストール
管理者権限のコマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。
winget install --scope machine --id Python.Python.3.12 -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_pip=1 Include_test=0 Include_launcher=1 InstallLauncherAllUsers=1"
--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。
方法2:インストーラーによるインストール
- Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
- ダウンロードしたインストーラーを実行する。
- 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから
pythonコマンドを実行できない。 - 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。
インストールの確認
コマンドプロンプトで以下を実行する。
python --version
バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。
AIエディタ Windsurf のインストール(Windows 上) [クリックして展開]
Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。Windsurf がインストール済みの場合、この手順は不要である。
管理者権限のコマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。
winget install --scope machine --id Codeium.Windsurf -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --custom "/SP- /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /DIR=""C:\Program Files\Windsurf"" /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"
--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。
【関連する外部ページ】
Windsurf の公式ページ: https://windsurf.com/
本記事のプログラムは Python 標準ライブラリ(datetime モジュール)のみを使用するため,追加ライブラリのインストールは不要である。
3. 実行のための準備とその確認手順(Windows 前提)
3.1 プログラムファイルの準備
第5章に掲載するソースコードをテキストエディタ(メモ帳,Windsurf 等)に貼り付け,main.py として保存する(文字コード:UTF-8)。
3.2 実行コマンド
コマンドプロンプトでファイルの保存先ディレクトリに移動し,以下を実行する。
python main.py
3.3 動作確認チェックリスト
| 確認項目 | 期待される結果 |
|---|---|
| 現在日時の取得 | JST タイムゾーン付きの現在日時(例:2025-01-15 14:30:25.123456+09:00)が表示される |
| タイムゾーンの確認 | 「JST」と表示される |
| 秒の切り捨て | 秒とマイクロ秒が 0 の日時(例:2025-01-15 14:30:00+09:00)が表示される |
| 指定秒数の引き算(30秒前) | 現在日時から 30 秒を減算した日時が表示される |
| 書式指定表示 | 「YYYY年MM月DD日 HH:MM:SS」形式の文字列が表示される |
| 2つの日時の差 | timedelta オブジェクトと total_seconds() による秒数が表示される |
4. 概要・使い方・実行上の注意
4.1 現在の日時の取得
dt.now(JST) で JST での現在日時を取得する。
tzinfo 属性でタイムゾーンを確認する。
4.2 秒の切り捨て
replace(second=0, microsecond=0) で秒とマイクロ秒を 0 に置き換え,分単位の日時を得る。
切り捨て後もタイムゾーン情報は保持される。
4.3 指定した秒数の引き算
timedelta(seconds=delta) を日時から減算し,指定秒数だけ過去の日時を得る。以下は 30秒前の例である。
引き算後もタイムゾーン情報は保持される。
4.4 日時の書式指定表示
strftime メソッドで日時を指定書式の文字列に変換する。%Y,%m,%d,%H,%M,%S がそれぞれ年,月,日,時,分,秒に置換される。
4.5 2つの日時の差の計算
2つの日時の差を求めると timedelta オブジェクトが得られる。total_seconds() で差を秒数として取得できる。
5. ソースコード
5.1 現在の日時の取得
現在の日時を取得し表示する。
from datetime import datetime as dt, timezone, timedelta
JST = timezone(timedelta(hours=+9), 'JST')
print(dt.now(JST))
タイムゾーンを確認する。
print(dt.now(JST).tzinfo)
5.2 秒の切り捨て
秒を切り捨てる。
from datetime import datetime as dt, timezone, timedelta
JST = timezone(timedelta(hours=+9), 'JST')
def first_of_minute(x):
return x.replace(second=0, microsecond=0)
print(first_of_minute(dt.now(JST)))
タイムゾーンを確認する。
print(first_of_minute(dt.now(JST)).tzinfo)
5.3 指定した秒数の引き算
現在日時の 30秒前を求める。
from datetime import datetime as dt, timezone, timedelta
JST = timezone(timedelta(hours=+9), 'JST')
def past_time(x, delta):
return x - timedelta(seconds=delta)
print(past_time(dt.now(JST), 30))
タイムゾーンを確認する。
print(past_time(dt.now(JST), 30).tzinfo)
5.4 日時の書式指定表示
日時を指定書式の文字列に変換する。
from datetime import datetime as dt, timezone, timedelta
JST = timezone(timedelta(hours=+9), 'JST')
now = dt.now(JST)
print(now.strftime('%Y年%m月%d日 %H:%M:%S'))
5.5 2つの日時の差の計算
2つの日時の差を求める。
from datetime import datetime as dt, timezone, timedelta
JST = timezone(timedelta(hours=+9), 'JST')
t1 = dt(2025, 1, 1, 0, 0, tzinfo=JST)
t2 = dt.now(JST)
diff = t2 - t1
print(diff)
print(diff.total_seconds())
6. まとめ
タイムゾーン指定での日時取得
timezone(timedelta(hours=+9), 'JST') でタイムゾーンを生成し,dt.now(JST) で現在日時を取得する。tzinfo 属性でタイムゾーンを確認できる。
秒の切り捨て
replace(second=0, microsecond=0) で秒とマイクロ秒を 0 にし,分単位の日時を得る。
日時の引き算
timedelta(seconds=delta) を日時から減算し,指定秒数だけ過去の日時を求める。
書式指定表示
strftime メソッドで日時を指定書式の文字列に変換する。
2つの日時の差
2つの日時の差から timedelta オブジェクトが得られ,total_seconds() で秒数に変換できる。