■ はじめに
Python の 日付・日時 ・時間をメモ 英語だけど、以下がわかりやすい
https://www.programiz.com/python-programming/datetime
目次
【1】日時・日付・時間の取得 【2】相互変換 1)文字列⇔日時の変換 2)timestamp ⇔ datetimeの変換 3)unix time (int) への変換 【3】日時・日付の計算 1)3日前後を計算 - datetime.timedelta 2)1ヶ月前後を計算 - dateutil.relativedelta => 応用編は、以下の関連記事を参照のこと。
Python ~ 基本編 / 日付・日時あれこれ ~
https://dk521123.hatenablog.com/entry/2022/02/01/000000
【1】日時・日付・時間の取得
サンプル
import datetime def main(): # 日時(2019-10-14 12:25:14.122283) now_object = datetime.datetime.now() print(now_object) # 日付(2019-10-14) today_object = datetime.date.today() print(today_object) # 時間(00:00:00) current_time_object = datetime.time() print(current_time_object) # 日時(2019-10-09 11:23:54) datetime_object = datetime.datetime(2019, 10, 9, 11, 23, 54, 0) print(datetime_object) print("year:", datetime_object.year) print("month:", datetime_object.month) print("day:", datetime_object.day) print("hour:", datetime_object.hour) print("minute:", datetime_object.minute) print("second:", datetime_object.second) print("microsecond:", datetime_object.microsecond) # 日付(2019-09-29) date_object = datetime.date(2019, 9, 29) print(date_object) # 時間(08:19:34.000011) current_time_object = datetime.time(8, 19, 34, 11) print(current_time_object) if __name__ == '__main__': main()
【2】相互変換
1)文字列⇔日時の変換
* 文字列⇔日時の変換は、 strptime() を使用
サンプル
import datetime def main(): # 文字列⇒日時 input_datetime = '2019-10-29 13:59:49' output_datetime = datetime.datetime.strptime( input_datetime, '%Y-%m-%d %H:%M:%S') print(output_datetime) # 日時⇒文字列 now_datetime = datetime.datetime.now() result = now_datetime.strftime('%Y/%m/%d %H:%M:%S') print(result) today = now_datetime.strftime('%Y%m%d') print(result) # 20230419 if __name__ == '__main__': main()
参考文献
https://qiita.com/shibainurou/items/0b0f8b0233c45fc163cd
2)timestamp ⇔ datetimeの変換
* [datetime => timestamp] -> datetime.datetime.timestamp() を使う * [timestamp => datetime] -> datetime.datetime.fromtimestamp() を使う
サンプル
import datetime if __name__ == '__main__': # datetime now_datetime = datetime.datetime.now() print(now_datetime) # datetime => timestamp now_timestamp = now_datetime.timestamp() print(now_timestamp) # timestamp => datetime now_datetime2 = datetime.datetime.fromtimestamp(now_timestamp) print(now_datetime2)
出力結果
2019-12-03 22:55:07.938806 1575381307.938806 2019-12-03 22:55:07.938806
3)unix time (int) への変換
import datetime if __name__ == '__main__': # timestamp now_timestamp = datetime.datetime.now().timestamp() print(now_timestamp) print(datetime.datetime.fromtimestamp(now_timestamp)) # timestamp => unix time now_unix_time = int(now_timestamp) print(now_unix_time) now_datetime = datetime.datetime.fromtimestamp(now_unix_time) print(now_datetime)
出力結果
1575381832.867667 2019-12-03 23:03:52.867667 1575381832 <- 小数点が削除 2019-12-03 23:03:52 <- ミリ秒が削られた
【3】日時・日付の計算
1)3日前後を計算 - datetime.timedelta
from datetime import datetime, timedelta # 現在日時を取得 current_datetime = datetime.now() # 2021-05-25 16:40:13.449495 print(current_datetime) # 3日後は、「+」する three_days_after = current_datetime + timedelta(days=3) # 3日前は、「-」する three_days_ago = current_datetime - timedelta(days=3) # three_days_after = 2021-05-28 print(f"three_days_after = {datetime.strftime(three_days_after, '%Y-%m-%d')}") # three_days_ago = 2021-05-22 print(f"three_days_ago = {datetime.strftime(three_days_ago, '%Y-%m-%d')}")
API仕様 - datetime.timedelta
https://docs.python.org/ja/3/library/datetime.html#timedelta-objects
より抜粋 # month と year がない... class datetime.timedelta( days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
2)1ヶ月前後を計算 - dateutil.relativedelta
from datetime import datetime from dateutil.relativedelta import relativedelta # 現在日時を取得 current_datetime = datetime.now() # 2021-05-25 16:40:13.449495 print(current_datetime) # 1ヶ月後は、「+」する one_month_after = current_datetime + relativedelta(months=1) # 1ヶ月前は、「-」する one_month_ago = current_datetime - relativedelta(months=1) # one_month_after = 2021-06-25 print(f"one_month_after = {datetime.strftime(one_month_after, '%Y-%m-%d')}") # one_month_ago = 2021-04-25 print(f"one_month_ago = {datetime.strftime(one_month_ago, '%Y-%m-%d')}")
API仕様 - dateutil.relativedelta
https://dateutil.readthedocs.io/en/stable/
補足:AWS Glue 上での使用について
ジョブタイプ「Python shell」で使用できるか試したら、 エラーなく、使用できた。 (ジョブタイプ「Spark」などの他のJobについては未確認) 詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2019/11/17/231505
参考文献
https://qiita.com/dkugi/items/8c32cc481b365c277ec2
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / 日付・日時あれこれ ~
https://dk521123.hatenablog.com/entry/2022/02/01/000000
Python で PostgreSQL を使う ~ PyGreSQL ~
https://dk521123.hatenablog.com/entry/2019/11/27/000316