Pythonの日付と時間の操作や編集方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。
1.演習用プログラムのダウンロード
演習用プログラム( practice09.py )をダウンロードします。
ダウンロードファイルは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice09.py を Python をインストールしたフォルダ(今回は C:\Python)に置きます。
2.ソースコードの表示
メモ帳を使って、演習用プログラム( practice09.py )を開きます。

practice09.py
3.日時の操作
① 現在日時を取得する
コマンドプロンプト で practice09.py を実行します。
プログラムを実行する方法は、こちらの記事『ファイルに保存されたプログラムの実行』を参照します。
以下のように表示されます。
C:\Users\kotablog>python "C:\Python\practice09.py" *** 現在日時を取得する *** 2024-07-14 10:30:56.773701
日付や時間を扱うには、datetime モジュールを使うと便利です。
現在日時を取得するには、datetime モジュールの 関数 now() を使います。
しかし、年と月、月と日の区切り文字に『 - 』ハイフンで区切られているし、1秒未満の時間も表示されてしまいます。
これを変更する方法は、《④日時を任意のフォーマットに変換する》で学びます。
プログラムソースを確認します。
01 # -*- coding: utf-8 -*-
02 """
03 演習プログラム9
04
05 日時の操作
06
07 """
08 import sys # モジュールのインポート
09 import datetime
10
11 # 現在日時を取得する
12 print("\n*** 現在日時を取得する ***")
13 dtNow = datetime.datetime.now()
14 print(dtNow)
15
16 #終了1
17 sys.exit()
09行目で、datetime モジュールをインポートしています。
13行目で、関数 now() を使って現在日時を取得しています。
② 任意の日付と日時を設定する
ソースコード #終了1 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** 任意の日付を設定する *** 2024-07-14 00:00:00 *** 任意の日時を設定する *** 2024-08-28 07:30:15
任意の日付や日時を設定するには、datetime オブジェクトのコンストラクタを使います。
19 # 任意の日付と日時を設定する
20 print("\n*** 任意の日付を設定する ***")
21 dt1 = datetime.datetime(2024, 7, 14)
22 print(dt1)
23
24 print("\n*** 任意の日時を設定する ***")
25 dt2 = datetime.datetime(2024, 8, 28, 7, 30, 15)
26 print(dt2)
27
28 #終了2
29 sys.exit()
21行目で、年・月・日を指定して、変数 dt1 を作成しています。
このとき、時・分・秒を省略すると、00:00:00 になります。
25行目で、年・月・日・時・分・秒を指定して、変数 dt2 を作成しています。
③ 現在日時の年、月、日、時、分、秒の部分を取得する
ソースコード #終了2 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** 現在日時の年の部分を取得する *** 2024 *** 現在日時の月の部分を取得する *** 7 *** 現在日時の日の部分を取得する *** 14 *** 現在日時の時の部分を取得する *** 10 *** 現在日時の分の部分を取得する *** 30 *** 現在日時の秒の部分を取得する *** 56
日時の各部分(年、月、日、時、分、秒)は、datetime オブジェクトの属性値を参照することで取得できます。
31 print("\n*** 現在日時の年の部分を取得する ***")
32 print(dtNow.year)
33
34 print("\n*** 現在日時の月の部分を取得する ***")
35 print(dtNow.month)
36
37 print("\n*** 現在日時の日の部分を取得する ***")
38 print(dtNow.day)
39
40 print("\n*** 現在日時の時の部分を取得する ***")
41 print(dtNow.hour)
42
43 print("\n*** 現在日時の分の部分を取得する ***")
44 print(dtNow.minute)
45
46 print("\n*** 現在日時の秒の部分を取得する ***")
47 print(dtNow.second)
48
49 #終了3
50 sys.exit()
④ 日時を任意のフォーマットに変換する
ソースコード #終了3 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** 日時を任意のフォーマットに変換する *** 2024/09/07 18:03 *** 日時を任意のフォーマットに変換する(日本語使用) *** 2024年09月07日(土) 18時03分
日時を任意のフォーマットに変換するには、関数 strftime() を使います。
フォーマットで使う書式コードは以下の通りです。
%Y: 0埋めした10進数で表記した西暦4桁
%y: 0埋めした10進数で表記した西暦の下2桁
%m: 0埋めした10進数で表記した月
%d: 0埋めした10進数で表記した日
%H: 0埋めした10進数で表記した時(24時間表記)
%I: 0埋めした10進数で表記した時(12時間表記)
%M: 0埋めした10進数で表記した分
%S: 0埋めした10進数で表記した秒
《Windows》
%#m: 0埋めしない10進数で表記した月
%#d: 0埋めしない10進数で表記した日
%#H: 0埋めしない10進数で表記した時(24時間表記)
%#M: 0埋めしない10進数で表記した分
%#S: 0埋めしない10進数で表記した秒
《Linux/MacOS》
%-m: 0埋めしない10進数で表記した月
%-d: 0埋めしない10進数で表記した日
%-H: 0埋めしない10進数で表記した時(24時間表記)
%-M: 0埋めしない10進数で表記した分
%-S: 0埋めしない10進数で表記した秒
%f: 0埋めした10進数で表記したマイクロ秒(6桁)
%A: ロケールの曜日名
%a: ロケールの曜日名(短縮形)
%B: ロケールの月名
%b: ロケールの月名(短縮形)
%j: 0埋めした10進数で表記した年中の日にち(正月が'001')
%U: 0埋めした10進数で表記した年中の週番号 (週の始まりは日曜日)
%W: 0埋めした10進数で表記した年中の週番号 (週の始まりは月曜日)
52 print("\n*** 日時を任意のフォーマットに変換する ***")
53 strdt = dtNow.strftime("%Y/%m/%d %H:%M")
54 print(strdt)
55
56 print("\n*** 日時を任意のフォーマットに変換する(日本語使用) ***")
57 import locale # モジュールのインポート
58 locale.setlocale(locale.LC_ALL, '') # strftimeで日本語を使う場合に必要
59 strdt = dtNow.strftime("%Y年%m月%d日(%a) %H時%M分")
60 print(strdt)
61
62 #終了4
63 sys.exit()
53行目で、現在日時を、年、月、日、時、分にフォーマット変換しています。
フォーマットに日本語を使用する場合は、locale モジュールを使って(57行目)、
関数 setlocale() で事前の設定が必要になります。(58行目)
⑤ strptime()で任意の日時を設定する
ソースコード #終了4 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** strptime()で任意の日時を設定する *** 2024-08-28 07:30:15
関数 strptime() では、日時のデータとフォーマットの書式コードを使って、任意の日時を設定することができます。
日時のデータとフォーマットの書式コードは一致させてください。
65 print("\n*** strptime()で任意の日時を設定する ***")
66 strDate = '2024/8/28 7:30:15'
67 strFormat = '%Y/%m/%d %H:%M:%S'
68 dt2 = datetime.datetime.strptime(strDate, strFormat)
69 print(dt2)
70
71 #終了5
72 sys.exit()
66行目で、日時のデータを設定。
67行目で、フォーマットの書式コードを設定。
68行目で、関数 strptime() を使って、日時を設定。
⑥ 経過時間を算出する
ソースコード #終了5 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** 経過時間を算出する *** 経過時間は 3秒です
日時のデータを引き算することで、経過時間を算出することができます。
74 print("\n*** 経過時間を算出する ***")
75 import time # モジュールのインポート
76 time.sleep(3) # 3秒間処理を一時停止
77 duration = datetime.datetime.now() - dtNow
78 value = duration.seconds
79 print("経過時間は " + str(value) + "秒です")
80
81 #終了6
82 sys.exit()
time モジュールを使って(75行目)、関数 sleep() で処理を一時停止することができます。(76行目)
77行目で、現在日時から dtNow(13行目で取得した現在日時)を引き算しています。
78行目で、引き算の結果から、秒の値を取得しています。
⑦ 来月の初日、今月の月末日を算出する
ソースコード #終了6 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
*** 来月の初日を算出する *** 2024/10/01 *** 今月の月末日を算出する *** 2024/09/30
84 print("\n*** 来月の初日を算出する ***")
85 from dateutil.relativedelta import relativedelta # モジュールのインポート
86 dtFirst = dtNow + relativedelta(months=1) # 1か月後
87 dtFirst = dtFirst.replace(day=1) # 1日
88 strdt = dtFirst.strftime("%Y/%m/%d")
89 print(strdt)
来月の初日を算出するには、relativedelta モジュールを使います。
86行目で、現在時刻の1か月後を算出しています。
87行目で、日を1に設定しています。
91 print("\n*** 今月の月末日を算出する ***")
92 import calendar # モジュールのインポート
93 # 日を今月の日数で置き換える
94 dtLast = dtNow.replace(day=calendar.monthrange(dtNow.year, dtNow.month)[1])
95 strdt = dtLast.strftime("%Y/%m/%d")
96 print(strdt)
今月の月末日を算出するには、calendar モジュールを使います。
94行目で、現在日時の日の部分を、今月の日数で置き換えています。
<数値の操作 | 日時の操作 | フォルダ名とファイル名の操作> |