【datetime】Pythonで日付操作:datetimeモジュールの基本的な使用方法

概要

datetimeモジュールを使用して日付や時刻を扱う方法について紹介します。
この記事ではdatetimeクラスを使用した日時取得等を説明します。

 

datetimeモジュール

基本的な型

 

名前 説明
date 年月日の日付を扱う
time 時分秒、マイクロ秒の時刻を扱う。特定の日付に依らない
datetime 年月日時分秒、マイクロ秒の日付時刻を扱う
timedelta 経過時間を表す。datetimeの差を扱う

 

使用方法

datetimeを使用して現在時刻を取得する

モジュールを読み込む。(モジュールとはファイル名のこと)
その次にdatetimeクラスのnowメソッドを使用する。


# モジュールを読み込む 
import datetime 

# 現在日時を取得 
now = datetime.datetime.now() 
print(now) # 2023-06-04 13:52:31.515904

 

モジュールの読み込み方

datetimeモジュールをimportした場合のnowメソッドの使用方法


# モジュールを読み込む 
import datetime 

# 現在日時を取得 
now = datetime.datetime.now() 
print(now) # 2023-06-04 13:52:31.515904

 

 

①datetimeモジュール名(ファイル名)
②datetimeモジュール名
③datetimeクラス
④メソッド名

 

datetimeモジュールのdatetimeクラスをimportした場合のnowメソッドの使用方法


# モジュールを読み込む 
from datetime import datetime 

# 現在日時を取得 
now = datetime.now() 
print(now) # 2023-06-04 13:52:31.515904

 

 

①datetimeモジュール名(ファイル名)
②datetimeクラス名
③datetimeクラス名
④メソッド名

 

datetimeを使用して指定した日時を作成する


from datetime import datetime 

# 2023年6月1日0時0分0秒のdatetimeを作成 
dt = datetime(2022, 6, 1, 0, 0, 0) 
print(dt) # 2022-06-01 00:00:00

 

指定した日付情報を取得したいとき

時分秒を指定せず、年月日だけdatetimeコンストラクタの引数に指定すればOK。


from datetime import datetime 

# 2023年6月1日のdatetimeを作成 
dt = datetime(2022, 6, 1) 
print(dt) # 2022-06-01 00:00:00

 

年、月、日の抽出

datetimeから日付情報を取得し、year,month,day属性を用いて抽出する。


from datetime import datetime 

# 現在日付を取得(2023/6/4の場合) 
now = datetime.now() 
print(now.year) # 2023 
print(now.month) # 6 
print(now.day) # 4

 

年、月、日以外の値も抽出したいとき

以下の属性を指定すれば抽出可能。

属性 抽出内容
year
month
day
hour
minute
second
microsecond マイクロ秒(100万分の1秒)
▲各属性の指定キーワード

 


from datetime import datetime 

# 現在日付を取得(2023/06/04 14:10:46.930268の場合) 
now = datetime.now() 
# 年 
print(now.year) # 2023 
# 月 
print(now.month) # 6 
# 日 
print(now.day) # 4 
# 時間 
print(now.hour) # 14 
# 分 
print(now.minute) # 10 
# 秒 
print(now.second) # 46 
# マイクロ秒
print(now.microsecond) # 930268

 

曜日を取得したい場合

weekday()

datetime型から曜日を取得したい場合、weekday()を使用する。
使用方法は以下のとおり。

datetime変数.weekday() # datetime変数の保持する曜日を表す数値を返却
 


from datetime import datetime 

# 指定した日付を作成して曜日表示 
dt = datetime(2022, 6, 1, 0, 0, 0)
print(dt.weekday()) # 2

 

weekdayを使用すると数値が返却される。
数値が意味する曜日は以下となる。

0 1 2 3 4 5 6
▲datetimeオブジェクトのweekday()を実行して返却される数値の意味

 

●●曜日と取得したい場合、以下のように曜日情報を定数などに定義しておればOK。


from datetime import datetime 

WEEK = { 0: "月曜日", 1: "火曜日", 2: "水曜日", 3: "木曜日", 4: "金曜日", 5: "土曜日", 6: "日曜日" } 

# 指定した日付を作成して曜日を表示 
dt = datetime(2022, 6, 1, 0, 0, 0) 
print(WEEK[dt.weekday()]) # 水曜日

 

文字列からdatetimeに変換

strptime()

文字列からdatetimeオブジェクトに変換したい場合、datetimeクラスのstrptime()を使用する。
使用方法は以下のとおり。

datetime.strptime(日付文字列, 変換フォーマット)
 


from datetime import datetime

# 文字列からdatetimeを作成ケース1
str_date_01 = "2023年6月1日10時15分10秒"
format_01 = "%Y年%m月%d日%H時%M分%S秒"
print(datetime.strptime(str_date_01, format_01)) # 2023-06-01 10:15:10

# 文字列からdatetimeを作成ケース2
str_date_02 = "2023/6/1"
format_02 = "%Y/%m/%d"
print(datetime.strptime(str_date_02, format_02)) # 2023-06-01 00:00:00

# 文字列からdatetimeを作成ケース3
str_date_03 = "2023-6-1"
format_03 = "%Y-%m-%d"
print(datetime.strptime(str_date_03, format_03)) # 2023-06-01 00:00:00

尚、存在しない日付等を変換しようとするとValueErrorが発生する

 

日付変換フォーマット記号例

フォーマット記号は以下のような種類がある。

記号 意味
%Y 西暦(4桁)
%m
%d
%H
%M
%S
%f マイクロ秒
▲strptimeで使用するフォーマット記号一覧

 

元号からdatetimeに変換したいとき

元号「令和」の場合


from datetime import datetime

# 元号"令和"の開始年を定義
REIWA_START_YEAR = 2019

# 元号と年月日を含む文字列
str_date = "令和5年6月1日"

# "令和"以降の文字列を抽出し、年月日を取得
str_date_list = str_date[2:].replace("年", " ").replace("月", " ").replace("日", "").split()
year, month, day = map(int, str_date_list)

# "令和"の開始年と年を加算し、月と日を追加
dt = datetime(REIWA_START_YEAR + year - 1, month, day)

print(dt) # 2023-06-01 00:00:00

 

元号「平成」の場合


from datetime import datetime

# 元号"平成"の開始年を定義
HEISEI_START_YEAR = 1989

# 元号と年月日を含む文字列
str_date = "平成1年10月10日"

# "平成"以降の文字列を抽出し、年月日を取得
str_date_list = str_date[2:].replace("年", " ").replace("月", " ").replace("日", "").split()
year, month, day = map(int, str_date_list)

# "平成"の開始年と年を加算し、月と日を追加
dt = datetime(HEISEI_START_YEAR + year - 1, month, day)

print(dt) # 1989-10-10 00:00:00

 

datetimeから文字列に変換

f-stringの使用

datetimeから文字列に変換する場合、f-stringを使用する。


from datetime import datetime

# 2023年6月1日のdatetimeを作成
some_day = datetime(2023, 6, 1)

# datetimeから文字列を作成
print(f"{some_day:%Y/%m/%d}") # 出力:2023/06/01

# 2023年6月1日 10時20分30秒のdatetimeを作成
some_day_2 = datetime(2023, 6, 4, 10, 20, 30)

# datetimeから文字列を作成
print(f"{some_day_2:%Y年%m月%d日%H時%M分%S秒}") # 出力:2023年06月04日10時20分30秒

#曜日の表示
print(f"{some_day_2:%A}") # Sunday
print(f"{some_day_2:%a}") # Sun

 

datatimeから元号に変換したいとき

 


from datetime import datetime

# 元号変換対象の日時
date = datetime(2019, 5, 1)

if datetime(1868, 1, 25) <= date < datetime(1912, 7, 30):
    era_name = "明治"
    year = date.year - 1867
elif datetime(1912, 7, 30) <= date < datetime(1926, 12, 25):
    era_name = "大正"
    year = date.year - 1911
elif datetime(1926, 12, 25) <= date < datetime(1989, 1, 8):
    era_name = "昭和"
    year = date.year - 1925
elif datetime(1989, 1, 8) <= date < datetime(2019, 5, 1):
    era_name = "平成"
    year = date.year - 1988
else: # 2019-05-01以降
    era_name = "令和"
    year = date.year - 2018

if year == 1:
    year = "元"
        
f"{era_name}{year}年{date.month}月{date.day}日"
# '令和元年5月1日'

文字列変換フォーマット記号例

文字列変換フォーマット記号は以下のような種類がある。

記号 意味
%Y 西暦(4桁)
%m 月(0埋めして2桁表記)
%d 日(0埋めして2桁表記)
%H 時(0埋めして2桁表記。24時間)
%M 分(0埋めして2桁表記)
%S 秒(0埋めして2桁表記)
%f マイクロ秒(左側から0埋め)
%w 曜日の番号(0-6の整数。0が日曜)
%A 曜日の名前(Sundayなど)
%a 曜日の短縮形(Sunなど)
▲文字列変換時のフォーマット一覧

datetime変数.weekday()の場合、月曜日が0だが文字列変換の「%w」を使用すると日曜日が0なので注意すること

 

補足:Python3.5以前のバージョンの場合の文字列変換

f-stringはPython3.6以降に登場した機能となる。
そのため、Python3.5以前のバージョンで実装している場合、文字列変換は以下を使用すること。

strftime()

from datetime import datetime 

# 文字列からdatetimeを作成 
FORMAT = "%Y年%m月%d日" 
# 日付を作成 
some_day = datetime(2023, 6, 1) 
# 文字列に変換 
str_day = some_day.strftime(FORMAT) 
print(str_day) # 2023年06月01日

 

スポンサーリンク