Pythonで日付の計算はほかの言語と比較してライブラリー多く存在するため、ローカルルール部分があるので、使う時に注意が必要
主にPure Pythonで使い場合とPandasで使う場合が多いので、この章はPandasでまとめたい。
ただし、すべて賄うことは無理なので、とりあえず、よく使われるもののみ取り上げる
タイムスタンプの生成
import pandas as pd
# pandasから直接生成する場合
# 任意の日付/時刻を表すオブジェクトを生成します。
res_01 = pd.Timestamp('1900/1/1 01:01:01.123456')
# タイムスタンプを生成する(date + time)
print(type(res_01))
print(res_01)
# 直接シリアル値への変換は不可(下記はエラーとなる)
# print(str(int(res_01)))
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
1900-01-01 01:01:01.123456
タイムスタンプ(本日は指定する場合)
# タイムスタンプ(本日は指定する場合)
res_02 = pd.Timestamp.today()
print(res_02)
# dateのみ取得
res_03 = pd.Timestamp.today().date()
print(res_03)
# timeのみ取得
res_04 = pd.Timestamp.today().time()
print(res_04)
2023-04-14 11:09:37.108559
2023-04-14
11:09:37.108559
時間をずらす場合
# 時間をずらす場合(3日前)
base_day = pd.Timestamp.today().date() - pd.Timedelta(days=3)
print(base_day)
# 時間をずらす場合(3日後)
base_day = pd.Timestamp.today().date() + pd.Timedelta(days=3)
print(base_day)
2023-04-11
2023-04-17
リスト生成する場合
# リスト生成する場合(月末の日がセットされる)
list_day = pd.date_range('2022/04/01','2023/03/31',freq='M')
print(list_day)
for li in list_day:
# タイムスタンプ
print(li)
# 日付のみ
print(li.date())
# 文字列型変換
print(li.strftime('%Y-%m-%d'))
break
# リスト生成する場合(月始めの日がセットされる)
list_day = pd.date_range('2022/04/01','2023/03/31',freq='MS')
print(list_day)
※DBへ書き出しする場合、str型またはタイムスタンプ型なのかによってSQL文検索結果が変わる場合があり、気をつける必要!
※DBから読み込みだとobject型であれば、タイムスタンプへの変換が必要(または読み込み時に指定する方法もある)
DatetimeIndex(['2022-04-30', '2022-05-31', '2022-06-30', '2022-07-31',
'2022-08-31', '2022-09-30', '2022-10-31', '2022-11-30',
'2022-12-31', '2023-01-31', '2023-02-28', '2023-03-31'],
dtype='datetime64[ns]', freq='M')
2022-04-30 00:00:00
2022-04-30
2022-04-30
DatetimeIndex(['2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01',
'2022-08-01', '2022-09-01', '2022-10-01', '2022-11-01',
'2022-12-01', '2023-01-01', '2023-02-01', '2023-03-01'],
dtype='datetime64[ns]', freq='MS')