- 1. 概要
- 2. time
- 3. datetime
- 4. ロケール・文字列への変換
- 5. 時刻差
- 6. 文字列からの変換
1. 概要
まずいな、このページ、あちこちに「sleep」をいれたもんだから、表示するのに無駄に時間がかかってしまっている。
日時を表すには、「float」型の「time」と日時オブジェクトの「datetime」があるらしい・・・。
本項は、下記の記事を参考にさせていただきました。
「time --- 時刻データへのアクセスと変換 — Python 3.8.3 ドキュメント」
「Python で現在時刻・日付・日時を取得 | note.nkmk.me」
「Python で日付から曜日や月を文字列(日本語や英語など)で取得 | note.nkmk.me」
「処理を一時停止!Python で sleep を使う方法【初心者向け】 | TechAcademyマガジン」
「日付フォーマット(datetime⇔文字列) | Python Snippets」
2. time
実は、「sleep」も「time」を「import」することにより、使用できるらしい。
import time
now1 = time.time()
time.sleep(1.0)
now2 = time.time()
print(now2-now1)
上記のソースを実行すると、下記の結果が得られます。
1.0008854866027832
出力を見ると、結構、制度が細かいのであろうことが想像されます。
3. datetime
「datetime」は、より一般的な日時を表現します。
書式変換もライブラリに用意されているようで。
import datetime
now = datetime.datetime.now()
print(now)
print(now.strftime('%Y年%m月%d日(%a) %H:%M:%S'))
上記のソースを実行すると、下記の結果が得られます。
2025-07-13 17:01:47.604775
2025年07月13日(Sun) 17:01:47
ここで、6行目の「print」が、おそらく出力されていないのではないか。
コマンドラインからの実行時には、出力されるのに?となりますが、ウェブで実行する場合、ロケールが設定されていないからということのようです。
4. ロケール・文字列への変換
ってことで、ロケールの話になります。本来は、ページを分けるべきかもしれませんが、うまい具合に対応すべきこととなりましたので、ここで記述します。
「strftime」のような、ロケールに依存するような関数を使う場合、ロケールを設定する必要があります。
前項のソースに手を入れて。
import datetime
import locale
print(locale.getlocale(locale.LC_ALL))
locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')
print(locale.getlocale(locale.LC_ALL))
now = datetime.datetime.now()
print(now)
print(now.strftime('%Y年%m月%d日(%a) %H:%M:%S'))
print(now.strftime('%Y年%m月%d日(%a) %p %I:%M:%S'))
print(now.strftime('%x(%A) %X'))
上記のソースを実行すると、下記の結果が得られます。
('C/C', 'UTF-8/C/C/C/C')
('ja_JP', 'UTF-8')
2025-07-13 17:01:47.682660
2025年07月13日(日) 17:01:47
2025年07月13日(日) 午後 05:01:47
2025/07/13(日曜日) 17時01分47秒
「strftime」に設定する書式の主なものは、下記になります。
他の多くの言語とほぼ同じかと思います。
書式 | 意 味 | 備 考 |
%a | ロケールの短縮された曜日 | 「日」「月」...「土」 |
%A | ロケールの曜日 | 「日曜日」「月曜日」...「土曜日」 |
%d | 月の何日目か | 「00」「01」~「31」 |
%H | 時(24時間) | 「00」「01」~「24」 |
%I | 時(12時間) | 「00」「01」~「12」 |
%m | 月 | 「00」「01」~「12」 |
%M | 分 | 「00」「01」~「59」 |
%p | ロケールの午前・午後 | 「午前」「午後」 |
%S | 秒 | 「00」「01」~「59」 |
%x | ロケールの日付を適切な形式で | 「1975/01/01」~「9999/12/31」 |
%X | ロケールの時間を適切な形式で | 「00時00分00秒」~「23時59分59秒」 |
%y | 西暦下2桁 | 「00」「01」~「99」 |
%Y | 西暦4桁 | 「1975」「1976」~「9999」 |
%z | UTCオフセット | (空文字列), +0000, -0400, +1030, +063415, -030712.345216 |
「%X」のロケールの時間を適切な形式で、というのは納得できますが。
「%x」のロケールの日付を適切な形式でというのは、議論の余地がありそうですな・・・。
5. 時刻差
「datetime」型は、差を「-」で算出できます。
import datetime
import time
past = datetime.datetime.now()
time.sleep(1.0)
diff = datetime.datetime.now() - past
print(diff)
上記のソースを実行すると、下記の結果が得られます。
0:00:01.000091
6. 文字列からの変換
日時型から文字列への変換を前の方でやりましたが、今度はその逆。
本サイトで、コンテンツ内に。
<meta name="date" content="2021-06-24T10:25:32+0900">
てな記述をしております。
これを逆に、「datetime」型へ変換したいと思いましてな。
これは「strptime」ちゅうのを使うらしい。
基本形は。
日時 = strptime(文字列, 書式)
らしい。
てことで、下記のソースを書きました。
import datetime
mydatetime = datetime.datetime.strptime('2021-06-24T10:25:32+0900', '%Y-%m-%dT%H:%M:%S%z')
print(mydatetime.strftime('%Y年%m月%d日 %H:%M:%S'))
上記のソースを実行すると、下記の結果が得られます。
2021年06月24日 10:25:32
意図通りの結果が得られました。
|