Pythonで日付文字列をYYYY-MM-DD形式に変換する方法【サンプルコード付き】
Pythonでは、「23rd Jan 2021」のような日付文字列を標準的な「YYYY-MM-DD」形式に変換したい場面がよくあります。本記事では、日が「1st、2nd、…、30th、31st」といった序数表現、月が「Jan、Feb、…、Nov、Dec」といった英語略称、年が1900〜2100の範囲の4桁の数値で構成される日付文字列を想定し、これを「YYYY-MM-DD」形式へ変換するプログラムを解説します。
例えば、入力が date = "23rd Jan 2021" の場合、出力は 2021-01-23 となります。
変換の手順
この問題は、以下の手順で解決できます。
- 月名のリスト Months を用意する:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
- 日付文字列を空白で分割し、[日, 月, 年] の形式のリストを作成する
- year := リストの3番目の要素(年)
- day := リストの1番目の要素から末尾2文字(序数の接尾辞)を除去したもの
- day が1桁の場合は、先頭に "0" を連結してゼロ埋めする
- month := Months リストを使って、月の略称を数値に変換する
- month が1桁の場合は、先頭に "0" を連結してゼロ埋めする
- (year, month, day) を「YYYY-MM-DD」形式の文字列として返す
Pythonでの実装例
それでは、実際のコードを見てみましょう。
def solve(date):
Months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
string = date.split()
year = string[2]
day = string[0][:-2]
if len(day) < 2:
day = "0" + day
month = str(Months.index(string[1]) + 1)
if len(month) < 2:
month = "0" + month
return "{0}-{1}-{2}".format(year, month, day)
date = "23rd Jan 2021"
print(solve(date))
コードのポイント
string[0][:-2]:スライスを利用して「23rd」から接尾辞「rd」を取り除き、日の数値部分だけを抽出します。Months.index(string[1]) + 1:リストのインデックスは0始まりのため、+1することで月名を1〜12の数値に変換しています。len(day) < 2:日や月が1桁の場合に先頭へ「0」を付け加え、常に2桁に揃えるゼロ埋め処理です。"{0}-{1}-{2}".format(...):年・月・日をハイフン区切りで連結し、「YYYY-MM-DD」形式の文字列を生成します。
入力
"23rd Jan 2021"
出力
2021-01-23
-
Pythonのunittestモジュールで学ぶユニットテストの基礎
本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。unittestの中核を担う4つの概念TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラ
-
Python 3で辞書を使って文字列をフォーマットする方法
Pythonでは、辞書(dict)を活用して文字列への値の埋め込み(補間)を行うことができます。この構文では、%と変換文字の間の括弧内に、辞書のキー名を指定します。例えば、キーcostに格納された浮動小数点数を$xxxx.xxの形式で表示したい場合は、表示したい位置に$%(cost).2fと記述します。辞書を使った文字列フォーマットの基本例以下は、辞書を使った文字列フォーマットで、文字列と数値を同時に補間・整形する例です。>>> print(%(language)s has %(number)03d quote types. % {language: Python, numb