日時の操作 – 【Pythonプログラミング1 ~基礎編~】

PROGRAMMING

Pythonの日付と時間の操作や編集方法を、演習用プログラムのソースコードを使い、それを実行しながら解説します。

1.演習用プログラムのダウンロード

演習用プログラム( practice09.py )をダウンロードします。
ダウンロードファイルは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice09.py を Python をインストールしたフォルダ(今回は C:\Python)に置きます。


2.ソースコードの表示

メモ帳を使って、演習用プログラム( practice09.py )を開きます。

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行目で、現在日時の日の部分を、今月の日数で置き換えています。
 

<数値の操作 日時の操作 フォルダ名とファイル名の操作>
タイトルとURLをコピーしました