dir() を並べました datetime.datetime / datetime.date / datetime.time / time
これを見ると日時の操作はdatetime.datetimeを使い、時間の計測はtimeを使えば良いと分かる
モジュール | モジュール | モジュール | モジュール |
datetime.datetime | datetime.date | datetime.time | time |
__add__ | __add__ | _STRUCT_TM_ITEMS | |
__class__ | __class__ | __class__ | |
__delattr__ | __delattr__ | __delattr__ | |
__dir__ | __dir__ | __dir__ | |
__doc__ | __doc__ | __doc__ | __doc__ |
__eq__ | __eq__ | __eq__ | __loader__ |
__format__ | __format__ | __format__ | __name__ |
__ge__ | __ge__ | __ge__ | __package__ |
__getattribute__ | __getattribute__ | __getattribute__ | __spec__ |
__gt__ | __gt__ | __gt__ | |
__hash__ | __hash__ | __hash__ | |
__init__ | __init__ | __init__ | |
__init_subclass__ | __init_subclass__ | __init_subclass__ | |
__le__ | __le__ | __le__ | |
__lt__ | __lt__ | __lt__ | |
__ne__ | __ne__ | __ne__ | |
__new__ | __new__ | __new__ | |
__radd__ | __radd__ | ||
__reduce__ | __reduce__ | __reduce__ | |
__reduce_ex__ | __reduce_ex__ | __reduce_ex__ | |
__repr__ | __repr__ | __repr__ | |
__rsub__ | __rsub__ | __setattr__ | |
__setattr__ | __setattr__ | __sizeof__ | |
__sizeof__ | __sizeof__ | __str__ | |
__str__ | __str__ | ||
__sub__ | __sub__ | ||
__subclasshook__ | __subclasshook__ | __subclasshook__ | |
————– | ————– | ———— | |
astimezone | altzone | ||
combine | asctime | ||
ctime | ctime | ctime | |
date | daylight | ||
day | day | get_clock_info | |
dst | dst | gmtime | |
fold | fold | localtime | |
fromisocalendar | fromisocalendar | fromisoformat | mktime |
fromisoformat | fromisoformat | monotonic | |
fromordinal | fromordinal | monotonic_ns | |
fromtimestamp | fromtimestamp | perf_counter | |
hour | hour | perf_counter_ns | |
isocalendar | isocalendar | process_time | |
isoformat | isoformat | isoformat | process_time_ns |
isoweekday | isoweekday | sleep | |
max | max | max | |
microsecond | microsecond | ||
min | min | min | |
minute | minute | ||
month | month | ||
now | |||
replace | replace | replace | |
resolution | resolution | resolution | |
second | second | ||
strftime | strftime | strftime | strftime |
strptime | strptime | ||
time | struct_time | ||
timestamp | timetuple | thread_time | |
timetuple | thread_time_ns | ||
timetz | time | ||
today | today | time_ns | |
toordinal | toordinal | ||
tzinfo | tzinfo | timezone | |
tzname | tzname | tzname | |
utcfromtimestamp | |||
utcnow | |||
utcoffset | utcoffset | ||
utctimetuple | |||
weekday | weekday | ||
year | year |
大変ためになる先輩の講義内容を引用させていただいています
自分で見て理解したら本文は消します。
丸写ししてます。引用です。
‘datetime’
dir(datetime)
[ ‘MAXYEAR’, ‘MINYEAR’,’date’, ‘datetime’, ‘datetime_CAPI’, ‘sys’, ‘time’, ‘timedelta’, ‘timezone’, ‘tzinfo’]
‘datetime.date’
[ ‘ctime’, ‘day’, ‘fromisoformat’, ‘fromordinal’, ‘fromtimestamp’, ‘isocalendar’, ‘isoformat’, ‘isoweekday’, ‘max’, ‘min’, ‘month’, ‘replace’, ‘resolution’, ‘strftime’, ‘timetuple’, ‘today’, ‘toordinal’, ‘weekday’, ‘year’]
datetime.date は日付を扱うためのクラスです。西暦 (year), 月 (month), 日 (day) を引数に渡してインスタンスを作成します。3 つの引数は省略できません。
# datetimeモジュールをインポート import datetime # datetime.dateクラスのインスタンスを作成 # 2018年10月15日 x = datetime.date(2018, 10, 15) # xのもつデータを表示 print("日付 :", x) # xのクラスを表示 print("クラス :", type(x)) # インスタンス変数を使って年月日を表示 print(x.year, "年", x.month, "月", x.day, "日")
日付 : 2018-10-15 クラス : <class 'datetime.date'> 2018 年 10 月 15 日
西暦 (year), 月 (month), 日 (day) は読み出し専用のインスタンス変数(データ属性)としてオブジェクトに保存されます。たとえば
と記述すると、オブジェクトから西暦を取り出すことができます。
‘datetime.datetime’
[ ‘astimezone’, ‘combine’, ‘ctime’, ‘date’, ‘day’, ‘dst’, ‘fold’, ‘fromisoformat’, ‘fromordinal’, ‘fromtimestamp’, ‘hour’, ‘isocalendar’, ‘isoformat’, ‘isoweekday’, ‘max’, ‘microsecond’, ‘min’, ‘minute’, ‘month’, ‘now’, ‘replace’, ‘resolution’, ‘second’, ‘strftime’, ‘strptime’, ‘time’, ‘timestamp’, ‘timetuple’, ‘timetz’, ‘today’, ‘toordinal’, ‘tzinfo’, ‘tzname’, ‘utcfromtimestamp’, ‘utcnow’, ‘utcoffset’, ‘utctimetuple’, ‘weekday’, ‘year’]
datetime.datetime は日時を扱うためのクラスです。西暦 (year), 月 (month), 日 (day), 時 (hour), 分 (minute), 秒 (second), ミリ秒 (millisecond) を引数に渡してインスタンスを作成できます。下のサンプルコードでは datetime.datetime.now()メソッド現在時刻を取得しています。
# datetimeモジュールをインポート import datetime # datetimeオブジェクトのnowメソッドで現在の日付と時刻を取得 x = datetime.datetime.now() # xのもつデータを表示 print("日付と時刻 :",x) # インスタンス変数を使って年月日を表示 print(x.year, "年", x.month, "月", x.day, "日") # インスタンス変数を使って時刻を表示 print(x.hour, "時", x.minute, "分", x.second, "秒") # 日付と時刻のデータをタプルで取得 print(x.timetuple())
日付と時刻 : 2018-10-25 11:51:56.860432 2018 年 10 月 25 日 11 時 51 分 56 秒 time.struct_time(tm_year=2018, tm_mon=10, tm_mday=25, tm_hour=15, tm_min=38, tm_sec=5, tm_wday=3, tm_yday=298, tm_isdst=-1)
datetime.datetime.timetuple() は、日付と時刻のデータをタプルで取得するメソッドです。実行結果の tm_wday は月曜日を 0 , 日曜日を 6 とした曜日番号を表しています。tm_yday はその年の 1 月 1 日から数えた経過日数です。
曜日番号の取得
datetime.dateオブジェクト、または datetime.datetimeオブジェクトの weekday()メソッドは月曜日を 0 , 日曜日を 6 とした曜日番号を返します。たとえば 2018年12月10日の曜日番号は、次のようなコードで取得することができます。
# datetimeモジュールをインポート import datetime # 2018年12月10日 x = datetime.date(2018, 12, 10) # 曜日番号を取得 print(x.weekday())
0
次のサンプルコードを実行すると、12月10日から12月16日までの曜日番号を表示させることができます。
# 12月10日~12月16日の曜日番号を表示 # datetimeモジュールをインポート import datetime # 日付差 dt = 1 dt = datetime.timedelta(1) # 起点日時 (2018年12月9日) x = datetime.date(2018, 12, 9) # 日付と曜日番号を表示 for k in range(7): x += dt print(x, " 曜日番号", x.weekday())
2018-12-10 曜日番号 0 2018-12-11 曜日番号 1 2018-12-12 曜日番号 2 2018-12-13 曜日番号 3 2018-12-14 曜日番号 4 2018-12-15 曜日番号 5 2018-12-16 曜日番号 6
weekday() によく似たメソッドに isoweekday() がありますが、こちらは月曜日を 1 , 日曜日を 7 とした曜日番号を返します。
日時を文字列に変換
文字列の format()メソッドの引数に日時のデータを渡すと文字列型に変換して返します。日時の表示形式を指定することもできます。
# datetimeモジュールをインポート import datetime # datetime.datetimeクラスのインスタンスを作成 # 2018年5月8日17時2分9秒 x = datetime.datetime(2018, 5, 8, 17, 2, 9) # 西暦を4桁、月を下2桁、日を下2桁で表示 print("{:%Y/%m/%d}".format(x)) # 西暦を2桁、月を下2桁、日を下2桁で表示 print("{:%y/%m/%d}".format(x)) # 時を24時間表記、分を2桁、秒を2桁で表示 print("{:%H:%M:%S}".format(x)) # 時を12時間表記、分を2桁、秒を2桁で表示 print("{:%I:%M:%S}".format(x)) # AM,PMの表記、時を12時間表記、分を2桁、秒を2桁で表示 print("{:%p%I:%M:%S}".format(x))
2018/05/08 18/05/08 17:02:09 05:02:09 PM05:02:09
‘datetime.time’
[ ‘dst’, ‘fold’, ‘fromisoformat’, ‘hour’, ‘isoformat’, ‘max’, ‘microsecond’, ‘min’, ‘minute’, ‘replace’, ‘resolution’, ‘second’, ‘strftime’, ‘tzinfo’, ‘tzname’, ‘utcoffset’]
‘datetime.timedelta’
[ ‘days’, ‘max’, ‘microseconds’, ‘min’, ‘resolution’, ‘seconds’, ‘total_seconds’]
2018年11月21日から 2018年11月20日を差し引くと、1 day という値が返ります:
# datetimeモジュールをインポート import datetime # datetime.dateクラスのインスタンスを作成 # 2018年11月21日 x = datetime.date(2018, 11, 21) # 2018年11月20日 y = datetime.date(2018, 11, 20) # 2018年11月21日と2018年11月20日の差を計算 print(x-y) # x-yのクラスを表示 print(type(x-y))
1 day, 0:00:00
日時の差分 x-y のクラスを調べると、datetime.timedelta が表示されています。datetime.timedelta は日時の差を扱うクラスであり、日時の差をとると、datetime.timedeltaクラスのインスタンスが自動的に生成されます。datetime.timedeltaオブジェクトを使って日時の加算を実行することもできます。次のサンプルコードでは、datetime.timedeltaオブジェクトを使って、2018年5月10日から100日後の日付を求めています。
# datetimeモジュールをインポート import datetime # datetime.dateクラスのインスタンスを作成 # 2018年5月10日 x = datetime.date(2018, 5, 10) # datetime.timedeltaクラスのインスタンスを作成 dx = datetime.timedelta(100) # 2018年5月10日から100日後の日付を表示 print(x + dx)
2018-08-18
曜日の表示
曜日 (day of the week) のリストを用意しておけば、日時データに対応する曜日を表示させることができます。曜日番号はリストの各要素を参照するためのインデックス番号として用います。
# 12月10日から12月16日までの曜日を表示 # datetimeモジュールをインポート import datetime # 曜日(day of the week)のリスト dweek = ["月", "火", "水", "木", "金", "土", "日"] # 日付差 dt = 1 dt = datetime.timedelta(1) # 起点日時 (2018年12月9日) x = datetime.date(2018, 12, 9) # 日付と曜日を表示 for k in range(7): x += dt print(x, dweek[x.weekday()])
2018-12-10 月 2018-12-11 火 2018-12-12 水 2018-12-13 木 2018-12-14 金 2018-12-15 土 2018-12-16 日
‘datetime.sys’
[ ‘api_version’, ‘argv’, ‘base_exec_prefix’, ‘base_prefix’, ‘breakpointhook’, ‘builtin_module_names’, ‘byteorder’, ‘call_tracing’, ‘callstats’, ‘copyright’, ‘displayhook’, ‘dllhandle’, ‘dont_write_bytecode’, ‘exc_info’, ‘excepthook’, ‘exec_prefix’, ‘executable’, ‘exit’, ‘flags’, ‘float_info’, ‘float_repr_style’, ‘get_asyncgen_hooks’, ‘get_coroutine_origin_tracking_depth’, ‘get_coroutine_wrapper’, ‘getallocatedblocks’, ‘getcheckinterval’, ‘getdefaultencoding’, ‘getfilesystemencodeerrors’, ‘getfilesystemencoding’, ‘getprofile’, ‘getrecursionlimit’, ‘getrefcount’, ‘getsizeof’, ‘getswitchinterval’, ‘gettrace’, ‘getwindowsversion’, ‘hash_info’, ‘hexversion’, ‘implementation’, ‘int_info’, ‘intern’, ‘is_finalizing’, ‘maxsize’, ‘maxunicode’, ‘meta_path’, ‘modules’, ‘path’, ‘path_hooks’, ‘path_importer_cache’, ‘platform’, ‘prefix’, ‘set_asyncgen_hooks’, ‘set_coroutine_origin_tracking_depth’, ‘set_coroutine_wrapper’, ‘setcheckinterval’, ‘setprofile’, ‘setrecursionlimit’, ‘setswitchinterval’, ‘settrace’, ‘stderr’, ‘stdin’, ‘stdout’, ‘thread_info’, ‘version’, ‘version_info’, ‘warnoptions’, ‘winver’]
‘datetime.timezone’
[ ‘dst’, ‘fromutc’, ‘max’, ‘min’, ‘tzname’, ‘utc’, ‘utcoffset’]
‘datetime.tzinf’
[ ‘dst’, ‘fromutc’, ‘tzname’, ‘utcoffset’]
コメント