Pythonでは、datetime
モジュールを使って日付や時間の処理を行うことが一般的です。
今回は、日付の書式変換や和暦と西暦の相互変換を効率よく行うための便利な関数をいくつか紹介します。
これらの関数を活用すれば、業務でのデータ処理やレポート作成がよりスムーズになります。
基本の日付フォーマット変換関数
基本となる日付フォーマット変換関数です。
convert_date_format(date_str: str, from_format: str, to_format: str) -> str
指定されたフォーマットで文字列の日付を受け取り、別のフォーマットで返す関数です。
from datetime import datetime
def convert_date_format(date_str: str, from_format: str, to_format: str) -> str:
"""
日付文字列のフォーマットを変換する関数。
Parameters:
date_str (str): 変換したい日付文字列。
from_format (str): 現在のフォーマット。
to_format (str): 変換後のフォーマット。
Returns:
str: 変換後の日付文字列。
"""
try:
date_obj = datetime.strptime(date_str, from_format)
return date_obj.strftime(to_format)
except ValueError as e:
return f"エラー: {e}"
# 使用例
print(convert_date_format("2025-03-06", "%Y-%m-%d", "%d/%m/%Y")) # 06/03/2025
実行結果
06/03/2025
西暦から和暦への変換関数
to_wareki(date_str: str, format: str) -> str
指定された西暦の日付を和暦に変換します。
import japanize_kivy # 和暦変換用
from datetime import datetime
def to_wareki(date_str: str, format: str) -> str:
"""
西暦の日付を和暦に変換する関数。
Parameters:
date_str (str): 西暦の日付文字列。
format (str): 現在のフォーマット。
Returns:
str: 和暦表記の日付。
"""
try:
date_obj = datetime.strptime(date_str, format)
import jaconv
wareki = japanize_kivy.datetime_to_wareki(date_obj)
return f"{wareki['era']}{jaconv.h2z(str(wareki['year']), digit=True)}年{date_obj.month}月{date_obj.day}日"
except ValueError as e:
return f"エラー: {e}"
# 使用例
print(to_wareki("2025-03-06", "%Y-%m-%d")) # 令和7年3月6日
実行結果
令和7年3月6日
和暦から西暦への変換関数
to_seireki(wareki_str: str) -> str
指定された和暦の日付を西暦に変換します。
def to_seireki(wareki_str: str) -> str:
"""
和暦の日付を西暦に変換する関数。
Parameters:
wareki_str (str): 和暦の日付文字列(例: 令和7年3月6日)。
Returns:
str: 西暦表記の日付 (YYYY-MM-DD)。
"""
try:
import re
eras = {'令和': 2018, '平成': 1988, '昭和': 1925, '大正': 1911, '明治': 1867}
match = re.match(r"(令和|平成|昭和|大正|明治)(\d+)年(\d+)月(\d+)日", wareki_str)
if match:
era, year, month, day = match.groups()
seireki_year = eras[era] + int(year)
return f"{seireki_year}-{int(month):02d}-{int(day):02d}"
else:
return "エラー: 和暦のフォーマットが不正です。"
except ValueError as e:
return f"エラー: {e}"
# 使用例
print(to_seireki("令和7年3月6日")) # 2025-03-06
実行結果
2025-03-06
ISOフォーマットへの変換関数
API連携などでよく使うISO 8601フォーマットに変換します。
to_iso_format(date_str: str, format: str) -> str
def to_iso_format(date_str: str, format: str) -> str:
"""
日付文字列をISO 8601フォーマットに変換する関数。
Parameters:
date_str (str): 変換したい日付文字列。
format (str): 現在のフォーマット。
Returns:
str: ISO 8601フォーマットの日付文字列。
"""
try:
date_obj = datetime.strptime(date_str, format)
return date_obj.isoformat()
except ValueError as e:
return f"エラー: {e}"
# 使用例
print(to_iso_format("06/03/2025", "%d/%m/%Y")) # 2025-03-06T00:00:00
実行結果
2025-03-06T00:00:00
現在の日付と時刻を取得する関数
get_current_datetime() -> str
def get_current_datetime() -> str:
"""
現在の日付と時刻を標準フォーマットで取得する関数。
Returns:
str: 現在の日付と時刻 (YYYY-MM-DD HH:MM:SS)。
"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 使用例
print(get_current_datetime())
実行結果(実行時の時刻)
2025-03-06 14:30:00
日本語表記の日付に変換する関数
to_japanese_date_format(date_str: str, format: str) -> str
def to_japanese_date_format(date_str: str, format: str) -> str:
"""
日付文字列を日本語表記に変換する関数。
Parameters:
date_str (str): 変換したい日付文字列。
format (str): 現在のフォーマット。
Returns:
str: 日本語表記の日付文字列 (YYYY年MM月DD日)。
"""
try:
date_obj = datetime.strptime(date_str, format)
return date_obj.strftime("%Y年%m月%d日")
except ValueError as e:
return f"エラー: {e}"
# 使用例
print(to_japanese_date_format("2025-03-06", "%Y-%m-%d")) # 2025年03月06日
実行結果
2025年03月06日
まとめ
今回紹介した便利な関数は、以下のようなシチュエーションで役立ちます。
- API連携時のフォーマット変換
- 和暦と西暦の相互変換
- レポート作成時の日本語表記対応