IT学習日記

Python 基本的な使い方(時間編)

このページでわかること

Pythonの時間に関する基本的な構文

準備

datetimeモジュールをインポートしてください。
標準で入っているので、インストールしなくても使えると思います。

データ型はVBAと違い、複数あります。
よく使うものとしてdate型、time型、datetime型、timedelta型があります。
このあたりは自分も解釈間違っているかもしれないですが、少なくとも型を意識して使わないとうまく処理できないケースが多々見られます。

# datetime型
import datetime

# date型
from datetime import date

# time型
from datetime import time

# timedelta型
from datetime import timedelta

備忘録

現時点での時間、日付表示

# 時間
now_=datetime.datetime.now()
>> 2022-02-19 06:19:49.007467

# 日付
today_=datetime.datetime.now().date()
>> 2022-02-19

#これでも日付とれる
today_=datetime.date.date()
>> 2022-02-19

昨日

# timedeltaを使って日付を一日引く
# 注意すべきはtimedeltaは一日単位でしか使えないので、一か月とか一年とかは別の方法でやる必要がある。
# このプログラムは2022/2/23に動かしました。
import datetime as dt
today_=dt.date.today()
yesterday=today_-dt.timedelta(days=1)
yesterday
>> datetime.date(2022, 2, 22)

月初、月末

  • calendarモジュールをインポート
  • calendar.monthrangeに「年」、「月」を引数で渡す。
  • すると、タプルで月初の曜日、月末を返してくれる。このときの月末を使用する。
  • replaceでdayを変換すれば完成
import calendar
import datetime as dt
today_=dt.date(2022,5,1)
month_range=calendar.monthrange(today_.year,today_.month)
print(f"月初   : {today_.replace(day=1)}")
print(f"月末   : {today_.replace(day=month_range)}")

曜日

# weekday()は曜日を数値で返す
# 月曜日が「0」、日曜日が「7」

import datetime as dt
today_=dt.date.today()
print(f"曜日を数値で    : {today_.weekday()}")
print(f"曜日を英語で(略) : {today_.strftime('%a')}")
print(f"曜日を英語で    : {today_.strftime('%A')}")

datetime型のデータをdate型で処理できない

# yesterdayをdate型でとり、dataflameをyesterdayで抽出してみる
# このとき日付のあるdate列はdatetime型であるため、抽出は失敗する
import datetime as dt
today_=dt.date.today()
yesterday=today_-dt.timedelta(days=1)
df2=df[df["date"]==yesterday] # date列をyesterdayで抽出
df2
>> データなし
# date型をdatetime型に変換するのは結構むずいらしい
# ここではdate型からyear,month,dayをそれぞれとりだし、datetime型にそれぞれ入れ込んで作ってみる
import datetime as dt
today_=dt.date.today()
ye=today_-dt.timedelta(days=1) # yesterdayだと長いのでyeにした
yesterday=dt.datetime(ye.year,ye.month,ye.day) # datetime型の中にyeのyear,month,dayを入れ込んだ
df2=df[df["date"]==yesterday] # date列をyesterdayで抽出
df2
>> データあり

リスト4