Python - 文法 - 日時・ロケール - ロケール・文字列への変換


 クラウディア


1. 概要
2. ロケール
3. 書式
4. msec 単位で出力
5. 備考

1. 概要

 本ページでは、前ページでちらっと触れている、時刻の文字列変換について記述します。

2. ロケール

 ってことで、ロケールの話になります。本来は、ページを分けるべきかもしれませんが、うまい具合に対応すべきこととなりましたので、ここで記述します。  「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-05-13 16:19:27.970778
2025年05月13日(火) 16:19:27
2025年05月13日(火) 午後 04:19:27
2025/05/13(火曜日) 16時19分27秒

3. 書式

 「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」
%f 10進数で表記したマイクロ秒 (左側から0埋めされます) 「000000」「000001」~「999999」
%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」のロケールの日付を適切な形式でというのは、議論の余地がありそうですな・・・。

4. msec 単位で出力


import datetime

print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
 の実行結果。

2025-05-13 16:41:34
 は、秒単位なので、その下まで、欲しいとき。

print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f'))
 と書くと。

2025-05-13 16:43:13:412304
 となって、マイクロ秒は、長すぎで直感的にわかりにくい。  ミリ秒、もしくは、10ミリ秒で出力したい・・・とき、「python」の文字列の特性を生かすと楽ちんです。

print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f'))
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f')[:-3])
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f')[:-4])
 の結果は、下記のようになります。

2025-05-13 16:47:26:706439
2025-05-13 16:47:26:707
2025-05-13 16:47:26:70

5. 備考

 本ページは、下記のサイトを参考にさせていただきました。
datetime --- 基本的な日付型および時間型」
「Pythonのdatetimeでformat変換 ミリ秒、文字列、タイムゾーン

AbemaTV 無料体験
【usus ウズウズ】