Python
 Computer >> コンピューター >  >> プログラミング >> Python

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 となります。

変換の手順

この問題は、以下の手順で解決できます。

  1. 月名のリスト Months を用意する:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
  2. 日付文字列を空白で分割し、[日, 月, 年] の形式のリストを作成する
  3. year := リストの3番目の要素(年)
  4. day := リストの1番目の要素から末尾2文字(序数の接尾辞)を除去したもの
  5. day が1桁の場合は、先頭に "0" を連結してゼロ埋めする
  6. month := Months リストを使って、月の略称を数値に変換する
  7. month が1桁の場合は、先頭に "0" を連結してゼロ埋めする
  8. (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
  1. Pythonのunittestモジュールで学ぶユニットテストの基礎

    本記事では、Python 3.x(およびそれ以前のバージョン)に標準搭載されている unittest モジュールを通じて、ソフトウェアテストの基本を解説します。unittest を使うことで、テストの自動化、セットアップ用コードと終了処理コードの共有、そして各フレームワークごとの独立したテスト実行が可能になります。ユニットテストでは、オブジェクト指向のさまざまな概念が活用されます。ここでは、特によく使われる主要な概念について見ていきましょう。unittestの中核を担う4つの概念TestCase(テストケース):特定の入力に対する応答を検証するための基底クラスです。unittest の基底クラ

  2. Python 3で辞書を使って文字列をフォーマットする方法

    Pythonでは、辞書(dict)を活用して文字列への値の埋め込み(補間)を行うことができます。この構文では、%と変換文字の間の括弧内に、辞書のキー名を指定します。例えば、キーcostに格納された浮動小数点数を$xxxx.xxの形式で表示したい場合は、表示したい位置に$%(cost).2fと記述します。辞書を使った文字列フォーマットの基本例以下は、辞書を使った文字列フォーマットで、文字列と数値を同時に補間・整形する例です。>>> print(%(language)s has %(number)03d quote types. % {language: Python, numb