Pythonで日付を扱う: datetimeオブジェクトと文字列の相互変換の方法

はじめに

日付を扱う際に、datetimeオブジェクトと文字列を相互変換することは非常に重要です。本記事では、Pythonにおけるdatetimeオブジェクトと文字列の相互変換の方法について解説します。

datetimeオブジェクトの概要

Pythonのdatetimeモジュールには、日付や時刻を扱うためのdatetimeオブジェクトが用意されています。datetimeオブジェクトは、日付・時刻の情報を保持し、それらを操作するための様々なメソッドが用意されています。

datetimeオブジェクトの作成方法には、以下のような方法があります。

from datetime import datetime, date, time, timedelta

# 現在時刻の取得
now = datetime.now()

# 日付の指定
d = date(2022, 3, 1)

# 時刻の指定
t = time(10, 30)

# 日付と時刻の指定
dt = datetime(2022, 3, 1, 10, 30)

datetimeオブジェクトと文字列の相互変換の基本

datetimeオブジェクトと文字列の相互変換は、strptime()関数とstrftime()メソッドを使うことで行うことができます。

datetimeオブジェクトを文字列に変換する方法

datetimeオブジェクトを文字列に変換するには、strftime()メソッドを使用します。strftime()メソッドは、指定されたフォーマットに従って、datetimeオブジェクトを文字列に変換します。

dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.strftime('%Y/%m/%d %H:%M:%S')
print(str_dt)  # 出力結果:2022/03/01 10:30:00

上記の例では、datetimeオブジェクトを’%Y/%m/%d %H:%M:%S’のフォーマットに従って文字列に変換しています。

文字列をdatetimeオブジェクトに変換する方法

文字列をdatetimeオブジェクトに変換するには、strptime()関数を使用します。strptime()関数は、指定されたフォーマットに従って、文字列をdatetimeオブジェクトに変換します。

from datetime import datetime, date, time, timedelta

# datetimeオブジェクトを文字列に変換する
dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.strftime('%Y/%m/%d %H:%M:%S')
print(str_dt)  # 出力結果:2022/03/01 10:30:00

# 文字列をdatetimeオブジェクトに変換する
str_dt = '2022/03/01 10:30:00'
dt = datetime.strptime(str_dt, '%Y/%m/%d %H:%M:%S')
print(dt)  # 出力結果:2022-03-01 10:30:00

上記の例では、strftime()メソッドを使用して、datetimeオブジェクトを文字列に変換しています。また、strptime()関数を使用して、文字列をdatetimeオブジェクトに変換しています。

strptime()関数による文字列のパース方法の具体例

strptime()関数を使用して、日付・時刻の文字列をdatetimeオブジェクトに変換するには、パースする文字列のフォーマットに合わせて、フォーマット指定子を指定する必要があります。

以下に、日付・時刻のフォーマット指定子の一覧表を示します。

フォーマット指定子説明
%Y4桁の年 (例: 2022)
%y2桁の年 (例: 22)
%m2桁の月 (01~12)
%d2桁の日 (01~31)
%H24時間表記の時刻 (00~23)
%I12時間表記の時刻 (01~12)
%M2桁の分 (00~59)
%S2桁の秒 (00~59)
%fマイクロ秒 (000000~999999)
%j年初からの通算日 (001~366)
%U年初からの通算週 (00~53, 日曜始まり)
%W年初からの通算週 (00~53, 月曜始まり)
%w曜日 (0~6, 0が日曜)
%Zタイムゾーン名
%zタイムゾーンオフセット (+HHMMまたは-HHMM)

以下に、日付・時刻の文字列をdatetimeオブジェクトに変換する具体的な例を示します。

# 時刻のパース例
dt = datetime.strptime('10:30:00', '%H:%M:%S')
print(dt)  # 出力結果:1900-01-01 10:30:00

# 日付と時刻のパース例
dt = datetime.strptime('2022-03-01 10:30:00', '%Y-%m-%d %H:%M:%S')
print(dt)  # 出力結果:2022-03-01 10:30:00

上記の例では、strptime()関数を使用して、日付・時刻の文字列をdatetimeオブジェクトに変換しています。フォーマット指定子に従って、日付・時刻の要素を正しくパースできていることが確認できます。

isoformat()メソッドとfromisoformat()関数

datetimeオブジェクトには、文字列との相互変換を簡単に行うためのisoformat()メソッドとfromisoformat()関数が用意されています。

isoformat()メソッドは、datetimeオブジェクトをISO 8601形式の文字列に変換します。

dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.isoformat()
print(str_dt)  # 出力結果:2022-03-01T10:30:00

fromisoformat()関数は、ISO 8601形式の文字列をdatetimeオブジェクトに変換します。

str_dt = '2022-03-01T10:30:00'
dt = datetime.fromisoformat(str_dt)
print(dt)  # 出力結果:2022-03-01 10:30:00

タイムゾーンの扱い

datetimeオブジェクトには、タイムゾーン情報を持たせることができます。タイムゾーンを持つdatetimeオブジェクトは、タイムゾーンを考慮した計算ができるようになります。

タイムゾーンを持つdatetimeオブジェクトを作成するには、以下のようにtzinfo引数にtimezoneオブジェクトを指定します。

from datetime import timezone

# タイムゾーンを考慮したdatetimeオブジェクトの作成
dt = datetime(2022, 3, 1, 10, 30, tzinfo=timezone(timedelta(hours=9)))

タイムゾーンを持つdatetimeオブジェクトを文字列に変換するには、strftime()メソッドに’%z’フォーマット指定子を指定します。

str_dt = dt.strftime('%Y-%m-%d %H:%M:%S %z')
print(str_dt)  # 出力結果:2022-03-01 10:30:00 +0900

タイムゾーンを持つdatetimeオブジェクトを文字列から作成する場合は、datetime.strptime()関数を使用して、文字列をdatetimeオブジェクトに変換した後、tzinfo属性にtimezoneオブジェクトを指定します。

from datetime import timezone

# 文字列からタイムゾーンを考慮したdatetimeオブジェクトの作成
str_dt = '2022-03-01 10:30:00 +0900'
dt = datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S %z')
dt = dt.replace(tzinfo=timezone(timedelta(hours=9)))

timedeltaオブジェクトによる日付の加算・減算

datetimeオブジェクトには、timedeltaオブジェクトを加算・減算することができます。timedeltaオブジェクトは、日付・時刻の差分を表すオブジェクトで、days, seconds, microsecondsの3つの属性を持ちます。

# datetimeオブジェクトの加算・減算
dt = datetime(2022, 3, 1, 10, 30)
delta = timedelta(days=1)
dt2 = dt + delta
print(dt2)  # 出力結果:2022-03-02 10:30:00

# dateオブジェクトの加算・減算
d = date(2022, 3, 1)
delta = timedelta(days=1)
d2 = d + delta
print(d2)  # 出力結果:2022-03-02

上記の例では、datetimeオブジェクトとtimedeltaオブジェクトを加算して、1日進めた日付を求めています。

また、dateオブジェクトとtimedeltaオブジェクトを加算して、1日進めた日付を求めています。

Pythonで日付を扱う: datetimeオブジェクトと文字列の相互変換の方法

Pythonには、日付や時刻を扱うためのdatetimeモジュールが用意されています。datetimeモジュールを使用することで、日付や時刻を簡単に扱うことができます。本記事では、datetimeオブジェクトと文字列の相互変換の方法について解説します。

datetimeオブジェクトと文字列の相互変換

datetimeモジュールでは、日付や時刻を表すdatetimeオブジェクトを作成することができます。また、datetimeオブジェクトを文字列に変換したり、文字列をdatetimeオブジェクトに変換することもできます。

datetimeオブジェクトを文字列に変換する

datetimeオブジェクトを文字列に変換するには、strftime()メソッドを使用します。strftime()メソッドは、引数に指定したフォーマットに従って、datetimeオブジェクトを文字列に変換します。

from datetime import datetime

# datetimeオブジェクトを文字列に変換する
dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.strftime('%Y/%m/%d %H:%M:%S')
print(str_dt)  # 出力結果:2022/03/01 10:30:00

上記の例

その他の日付文字列フォーマットとdatetimeオブジェクトの相互変換

datetimeオブジェクトを任意の日付・時刻フォーマットの文字列に変換する場合は、strftime()メソッドにフォーマット指定子を指定します。フォーマット指定子には、様々な日付・時刻フォーマットがあります。以下に代表的なフォーマット指定子をいくつか示します。

フォーマット指定子説明
%Y4桁の年
%m2桁の月
%d2桁の日
%H24時間表記の時刻
%M
%S
%a曜日の省略形 (例: Mon)
%A曜日の完全形 (例: Monday)
%b月の省略形 (例: Jan)
%B月の完全形 (例: January)
%cローカルの日付と時刻
%pAM/PM
%zタイムゾーンのオフセット

例えば、’%Y-%m-%d %H:%M:%S’というフォーマット指定子を指定することで、’2022-03-01 10:30:00’という形式の文字列に変換することができます。

# datetimeオブジェクトを日付・時刻フォーマットの文字列に変換する
dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.strftime('%Y-%m-%d %H:%M:%S')
print(str_dt)  # 出力結果:2022-03-01 10:30:00

strptime()関数による任意の文字列フォーマットのパース方法

datetimeモジュールでは、文字列からdatetimeオブジェクトを作成することもできます。文字列からdatetimeオブジェクトを作成するには、strptime()関数を使用します。strptime()関数は、文字列とフォーマット指定子を引数に取り、datetimeオブジェクトを返します。

# 文字列からdatetimeオブジェクトを作成する
str_dt = '2022-03-01 10:30:00'
dt = datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S')
print(dt)  # 出力結果:2022-03-01 10:30:00

上記の例では、’2022-03-01 10:30:00’という文字列をdatetimeオブジェクトに変換しています。strptime()関数の第2引数には、変換元の文字列のフォーマット指定子を指定しています。上記の例では、’%Y-%m-%d %H:%M:%S’という指定子を指定しているため、変換元の文字列が’2022-03-01 10:30:00’であることをstrptime()関数に伝えています。

strftime()メソッドによる任意の文字列フォーマットへのフォーマット方法

datetimeオブジェクトを指定のフォーマットで文字列に変換するには、strftime()メソッドを使用します。strftime()メソッドは、datetimeオブジェクトを指定のフォーマットで文字列に変換します。

# datetimeオブジェクトを指定のフォーマットで文字列に変換する
dt = datetime(2022, 3, 1, 10, 30)
str_dt = dt.strftime('%Y/%m/%d %H:%M:%S')
print(str_dt)  # 出力結果:2022/03/01 10:30:00

上記の例では、datetimeオブジェクトを’%Y/%m/%d %H:%M:%S’というフォーマットで文字列に変換しています。

その他の文字列フォーマットとdatetimeオブジェクトの相互変換の例

以下は、他のフォーマットでの文字列とdatetimeオブジェクトの相互変換の例です。

# 日本の標準時 (JST) を表す文字列からdatetimeオブジェクトを作成する
str_dt = '2022-03-01 10:30:00 +0900'
dt = datetime.strptime(str_dt, '%Y-%m-%d %H:%M:%S %z')
print(dt)  # 出力結果:2022-03-01 10:30:00+09:00

# RFC2822形式の日付文字列からdatetimeオブジェクトを作成する
str_dt = 'Tue, 01 Mar 2022 10:30:00 +0900'
dt = datetime.strptime(str_dt, '%a, %d %b %Y %H:%M:%S %z')
print(dt)  # 出力結果:2022-03-01 10:30:00+09:00

# ISO8601形式の日付文字列からdatetimeオブジェクトを作成する
str_dt = '2022-03-01T10:30:00+09:00'
dt = datetime.fromisoformat(str_dt)
print(dt)  # 出力結果:2022-03-01 10:30:00+09:00

# datetimeオブジェクトをUnix時間に変換する
dt = datetime(2022, 3, 1, 10, 30)
unixtime = dt.timestamp()
print(unixtime)  # 出力結果:1646067000.0

# Unix時間からdatetimeオブジェクトを作成する
unixtime = 1646067000.0
dt = datetime.fromtimestamp(unixtime)
print(dt)  # 出力結果:2022-03-01 10:30:00

datetimeオブジェクトと文字列の相互変換の応用例

datetimeオブジェクトと文字列の相互変換は、日付データの加工や保存などで非常に重要です。以下は、datetimeオブジェクトと文字列の相互変換を活用した日付データ処理の例です。

例1:日付の加算・減算

datetimeオブジェクトには、日付や時刻を加算・減算することができるメソッドが用意されています。これを利用することで、日付の計算が簡単に行えます。

# 日付の加算・減算
dt = datetime(2022, 3, 1)
delta = timedelta(days=7)
dt_after_week = dt + delta
dt_before_week = dt - delta
print(dt_after_week.strftime('%Y/%m/%d'))  # 出力結果:2022/03/08
print(dt_before_week.strftime('%Y/%m/%d'))  # 出力結果:2022/02/22

例2:日付の比較

datetimeオブジェクト同士を比較することで、日付の前後関係を調べることができます。

# 日付の比較
dt1 = datetime(2022, 3, 1)
dt2 = datetime(2022, 3, 8)
if dt1 < dt2:
    print('dt1 is before dt2')
else:
    print('dt2 is before dt1')

例3:日付のフォーマット変換

日付のフォーマットを変換することで、表示形式を変更することができます。

# 日付のフォーマット変換
dt = datetime(2022, 3, 1)
str_dt = dt.strftime('%Y年%m月%d日')
print(str_dt)  # 出力結果:2022年03月01日

CSVファイルやデータベースに保存された日付データの取り扱い方法

CSVファイルやデータベースに保存された日付データを取り扱う場合、フォーマットが異なる場合があります。この場合、datetimeオブジェクトと文字列の相互変換を利用して、必要なフォーマットに変換する必要があります。

以下は、CSVファイルから日付データを読み込み、datetimeオブジェクトに変換する例です。

import csv

with open('data.csv') as f:
    reader = csv.reader(f)
    header = next(reader)
    for row in reader:
        date_str = row[0]
        dt = datetime.strptime(date_str, '%Y/%m/%d %H:%M:%S')
        print(dt)

まとめ

本記事では、Pythonにおける日付データの取り扱いについて、datetimeオブジェクトと文字列の相互変換の方法について解説しました。具体的には、以下の内容について取り上げました。

  • datetimeオブジェクトの作成方法
  • datetimeオブジェクトから文字列に変換する方法(strftime()メソッド)
  • 文字列からdatetimeオブジェクトに変換する方法(strptime()関数)
  • 日付文字列の様々なフォーマットとdatetimeオブジェクトの相互変換方法
  • datetimeオブジェクトと文字列の相互変換を活用した日付データ処理の例

日付データの取り扱いは、様々なプログラム開発で必要となる重要な項目の一つです。Pythonのdatetimeモジュールを利用することで、簡単かつ正確に日付データを取り扱うことができます。

コメント

タイトルとURLをコピーしました