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:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「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() で秒数に変換できる。