【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):
    weekdays = ["Mon", "Tues", "Wednes", "Thurs", "Fri", "Satur", "Sun"]
    return weekdays[weekday] +  "day"


# 現在の日付を取得
today = datetime.date.today()

formatted_date = today.strftime("%Y/%m/%d")
# 曜日の取得
weekday = weekday_to_japanese(today.weekday())
print(formatted_date)  
print(weekday)
2023/11/18
Monday

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

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

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

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

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を発生させます。

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

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

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

目次から探す