【Python】文字列を日付型に変換する方法を解説

この記事では、Pythonで文字列を日付型に変換する方法と、日付型から文字列に変換する方法を解説します。

さらに、よく使われる日付フォーマットの例や注意点とエラーハンドリングについても紹介します。

初心者の方でもわかりやすく、サンプルコードと実行結果の例を交えて解説していきます。

目次から探す

Pythonでの文字列から日付型への変換方法

Pythonでは、文字列を日付型に変換するために、datetimeモジュールを利用することができます。

以下では、datetimeモジュールを使った文字列から日付型への変換方法について解説します。

datetimeモジュールの利用

まずは、datetimeモジュールをインポートします。

import datetime

strftimeメソッドを使ったフォーマット指定

strftimeメソッドを使うことで、日付型を指定したフォーマットの文字列に変換することができます。

以下は、日付型を指定したフォーマットの文字列に変換する例です。

import datetime
# 現在の日付を取得
now = datetime.datetime.now()
# 日付型を指定したフォーマットの文字列に変換
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date) 
2023-11-18 07:38:15

strptimeメソッドを使った文字列から日付型への変換

strptimeメソッドを使うことで、文字列を指定したフォーマットの日付型に変換することができます。

以下は、文字列を指定したフォーマットの日付型に変換する例です。

import datetime
# 文字列を指定したフォーマットの日付型に変換
date_string = "2022-01-01"
date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print(date)
2022-01-01 00:00:00

以上がPythonでの文字列から日付型への変換方法です。

datetimeモジュールの利用やstrftimeメソッドstrptimeメソッドの使い方を理解することで、日付型と文字列の相互変換がスムーズに行えるようになります。

日付型から文字列への変換方法

Pythonでは、日付型から文字列への変換も簡単に行うことができます。

ここでは、strftimeメソッドを使ったフォーマット指定と、日本語表記や曜日の取得について解説します。

strftimeメソッドを使ったフォーマット指定

strftimeメソッドは、日付型のオブジェクトに対して特定のフォーマットを指定して文字列に変換するためのメソッドです。

以下は、strftimeメソッドを使って日付型を文字列に変換する例です。

import datetime
# 現在の日付を取得
today = datetime.date.today()
# フォーマット指定して文字列に変換
formatted_date = today.strftime("%Y年%m月%d日")
print(formatted_date)
2023年11月18日

上記の例では、%Yは年を4桁で表示し、%mは月を2桁で表示、%dは日を2桁で表示することを指定しています。

これにより、現在の日付が「2022年01月01日」という形式の文字列に変換されます。

日本語表記や曜日の取得

strftimeメソッドを使うことで、日本語表記や曜日の取得も簡単に行うことができます。

以下は、日本語表記や曜日の取得の例です。

import datetime
import locale
# ロケールを日本語に設定
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
# 現在の日付を取得
today = datetime.date.today()
# 日本語表記で文字列に変換
formatted_date = today.strftime("%Y年%m月%d日")
# 曜日の取得
weekday = today.strftime("%A")
print(formatted_date)
print(weekday)
2023年11月18日
土曜日

上記の例では、locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')によってロケールを日本語に設定しています。

これにより、日本語表記での曜日の取得が可能になります。

また、%Aを使うことで、曜日を文字列として取得することができます。

環境によっては文字化けする

ロケールを変更して%Aを使って曜日の出力する方法ですが、開発環境によっては文字化けが発生します。ですので、環境依存のない曜日の取得を行いたい場合は、以下のように関数を作成するといいでしょう。

import datetime

# weekdayの値を使って曜日を日本語で取得する関数
def weekday_to_japanese(weekday,is_full=False):
    weekdays = ["月", "火", "水", "木", "金", "土", "日"]
    return weekdays[weekday] +  is_full * "曜日"


# 現在の日付を取得
today = datetime.date.today()
# 日本語表記で文字列に変換
formatted_date = today.strftime("%Y年%m月%d日")
# 曜日の取得
weekday = weekday_to_japanese(today.weekday(),False)
weekday_full = weekday_to_japanese(today.weekday(),True)
print(formatted_date)  
print(weekday)
print(weekday_full)
2023年11月18日
土
土曜日

こちらのコードは環境依存のない曜日取得処理なので、どの環境でも月曜日火曜日などの日本語表記の曜日を取得できます。

以上が、日付型から文字列への変換方法です。

よく使われる日付フォーマットの例

日付や時刻を表現する際には、特定のフォーマットを指定することが一般的です。

Pythonでは、datetimeモジュールのstrftimeメソッドを使って、日付や時刻を指定したフォーマットで表示することができます。

以下では、よく使われる日付フォーマットの例を紹介します。

年月日のフォーマット

年月日を表現する際には、次のようなフォーマットを使用することがあります。

  • %Y : 4桁の年 (例: 2022)
  • %m : 2桁の月 (01から12)
  • %d : 2桁の日 (01から31)

例えば、現在の日付を「年-月-日」の形式で表示するには、以下のようなコードを使用します。

import datetime
now = datetime.datetime.now()
formatted_date = now.strftime("%Y-%m-%d")
print(formatted_date)
2023-11-18

実行結果は、例えば 2022-01-01 となります。

時刻のフォーマット

時刻を表現する際には、次のようなフォーマットを使用することがあります。

  • %H : 24時間表記の時 (00から23)
  • %M : 分 (00から59)
  • %S : 秒 (00から59)

例えば、現在の時刻を「時:分:秒」の形式で表示するには、以下のようなコードを使用します。

import datetime
now = datetime.datetime.now()
formatted_time = now.strftime("%H:%M:%S")
print(formatted_time)
07:49:17

実行結果は、例えば 12:34:56 となります。

曜日のフォーマット

曜日を表現する際には、次のようなフォーマットを使用することがあります。

  • %A : 完全な曜日名 (例: Monday)
  • %a : 短縮された曜日名 (例: Mon)

例えば、現在の曜日を「曜日名」の形式で表示するには、以下のようなコードを使用します。

import datetime
now = datetime.datetime.now()
formatted_weekday = now.strftime("%A")
print(formatted_weekday)
Saturday

実行結果は、例えば Saturday となります。

以上が、よく使われる日付フォーマットの例です。

これらのフォーマットを使って、日付や時刻を柔軟に表現することができます。

注意点とエラーハンドリング

日付型への変換において、不正な日付文字列が与えられた場合やエラーが発生した場合の処理方法について説明します。

不正な日付文字列の処理

不正な日付文字列が与えられた場合、strptimeメソッドValueErrorを発生させます。

このエラーをハンドリングするために、try-except文を使用します。

以下は、不正な日付文字列が与えられた場合にエラーメッセージを表示する例です。

import datetime
date_string = "2022-13-01"  # 不正な日付文字列
try:
    date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
    print("日付:", date)
except ValueError:
    print("不正な日付文字列です")
不正な日付文字列です

この例では、strptimeメソッドValueErrorを発生させる可能性があるため、tryブロック内で処理を行い、エラーが発生した場合にはexceptブロック内のコードが実行されます。

エラーハンドリングの方法

日付型への変換において、エラーが発生した場合のハンドリング方法は、try-except文を使用する方法以外にもあります。

例えば、dateutilモジュールのparserクラスを使用することで、より柔軟なエラーハンドリングが可能です。

以下は、dateutil.parserを使用したエラーハンドリングの例です。

from dateutil import parser
date_string = "2022-13-01"  # 不正な日付文字列
try:
    date = parser.parse(date_string)
    print("日付:", date)
except parser.ParserError:
    print("不正な日付文字列です")
不正な日付文字列です

dateutil.parser.parseメソッドは、与えられた文字列を解析して日付型に変換します。

エラーが発生した場合には、ParserErrorを発生させます。

このエラーをハンドリングすることで、不正な日付文字列の処理が行えます。

以上が、注意点とエラーハンドリングに関する解説です。

不正な日付文字列の処理やエラーハンドリングの方法を適切に行うことで、プログラムの安定性を確保することができます。

目次から探す