はじめに
日付を扱う際に、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オブジェクトに変換するには、パースする文字列のフォーマットに合わせて、フォーマット指定子を指定する必要があります。
以下に、日付・時刻のフォーマット指定子の一覧表を示します。
フォーマット指定子 | 説明 |
---|---|
%Y | 4桁の年 (例: 2022) |
%y | 2桁の年 (例: 22) |
%m | 2桁の月 (01~12) |
%d | 2桁の日 (01~31) |
%H | 24時間表記の時刻 (00~23) |
%I | 12時間表記の時刻 (01~12) |
%M | 2桁の分 (00~59) |
%S | 2桁の秒 (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()メソッドにフォーマット指定子を指定します。フォーマット指定子には、様々な日付・時刻フォーマットがあります。以下に代表的なフォーマット指定子をいくつか示します。
フォーマット指定子 | 説明 |
---|---|
%Y | 4桁の年 |
%m | 2桁の月 |
%d | 2桁の日 |
%H | 24時間表記の時刻 |
%M | 分 |
%S | 秒 |
%a | 曜日の省略形 (例: Mon) |
%A | 曜日の完全形 (例: Monday) |
%b | 月の省略形 (例: Jan) |
%B | 月の完全形 (例: January) |
%c | ローカルの日付と時刻 |
%p | AM/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モジュールを利用することで、簡単かつ正確に日付データを取り扱うことができます。
コメント