年金事務所が発行する公文書(PDF形式)をOCRで読み取り、
社内システムに格納されているデータと一致しているかをチェックする作業をしています。
年金事務所の用いる日付形式は「元号コード-yymmdd」となっており、
例えば昭和50年12月31日であれば、「3-501231」と表されています。
一方社内システムは「yyyymmdd」形式のため、その形式に変換する必要があります。
元号コード
昭和:3
平成:4
令和:5
元号年から西暦を求めるには下記の計算を行います。
昭和:元号年に25を足し、さらに1900を加える
平成:元号年から12を引き、2000を加える
令和:元号年に18を足し、さらに2000を加える
上記を踏まえて、リストに格納した年金事務所日付データを変換します。
date_list = ['3-501231','4-101231','5-021231']
for cnt in range(len(date_list)):
eracode = date_list[cnt][0]
eray = int(date_list[cnt][2:4])
if eracode == '3':
yyyy = int(eray) + 25 + 1900
elif eracode == '4':
yyyy = int(eray) - 12 + 2000
else:
yyyy = int(eray) + 18 + 2000
yyyymmdd = str(yyyy) + date_list[cnt][4:8]
関数化する場合
def gengo(erayymmdd):
eracode = erayymmdd[0]
eray = int(erayymmdd[2:4])
if eracode == '3':
yyyy = int(eray) + 25 + 1900
elif eracode == '4':
yyyy = int(eray) - 12 + 2000
else:
yyyy = int(eray) + 18 + 2000
yyyymmdd = str(yyyy) + erayymmdd[4:8]
return yyyymmdd
gengo('5-030101')
## 20210101
なお、このコードでは存在しない日付、例えば昭和64年1月10日(3-640110)であっても
特に判定は行わずに西暦に変換しています。
期間計算等を行うためにPython日付形式で取得したい場合は、
datetimeを使用しています。
from datetime import datetime as dt #datetimeをインポート
date_list = ['3-501231','4-101231','5-021231']
for cnt in range(len(date_list)):
eracode = date_list[cnt][0]
eray = int(date_list[cnt][2:4])
if eracode == '3':
yyyy = int(eray) + 25 + 1900
elif eracode == '4':
yyyy = int(eray) - 12 + 2000
else:
yyyy = int(eray) + 18 + 2000
yyyymmdd = str(yyyy) + date_list[cnt][4:8]
modify_yyyymmdd = dt.strptime(yyyymmdd,'%Y%m%d') #python日付形式に変換
print(modify_yyyymmdd)
和暦・西暦の相互変換や大正以前の元号年を扱いたい場合は、
slangsoftさんのjeraconvを利用させて頂いております。
https://pypi.org/project/jeraconv/