Python日付時間関連メモ

Pythonで日付、時間を操作する際のメモ。
すーぐ忘れるので。
以下、コードスニペットのように関数を書いて行くが、以下の通りimportしてあることが前提。

from datetime import datetime as dt
from datetime import timedelta

また、日付フォーマットは断りの無い限りすべてYYYYMMDD。

日付から曜日を得る

localeを使う方法がスマートだが、文字コードの都合で採用せず。
私のメインの使用方法がWindows上の面倒な仕事を効率化することなのだが、Windows上で動かすならいまだに文字コードはcp932(Shift-JIS)にしておくのが無難。
そういったわけで自作リストでなんとかする。

def get_jpn_weekday(_date):
    # 日付を受け取り、以下のリストから一つを返す
    wday_list = ['月', '火', '水', '木', '金', '土', '日', ]
    _tempdate = dt.strptime(_date, '%Y%m%d)
    return wday_list[_tempdate.weekday()]

2つの日付の間の日をすべて返す

開始日、終了日を渡して、その期間のすべての日付に対して処理をする場合に使う。

def get_days_btwn_two(_startday, endday):
    # ふたつの日付を受け取り、あいだの日付リストを返す

    # datetimeに変換
    _startday_dt = dt.strptime(_startday, '%Y%m%d')
    _untilday_dt = dt.strptime(_untilday, '%Y%m%d')

    # 日付数の算出
    # 最終日も含めるため+1
    _num_days = (_untilday_dt - _startday_dt).days + 1

    _datelist = []
    for i in range(_num_days):
        _temp_day = _startday_dt + timedelta(days=i)
        _datelist.append(_temp_day.strftime('%Y%m%d'))

    return _datelist

2つの時間を足す

[H]H:MMフォーマットの時間を2つ受け取り、足し合わせた時間を返す。

def add_hour(timeA, timeB):
    # 時間を2つ取り、足して返す。
    hourA, minA = timeA.split(':')
    hourB, minB = timeB.split(':')

    # 分を足し合わせ、60を超えた分を除いて記憶
    shour, min = divmod(int(minA) + int(mnB), 60)
    # 時間を足し合わせる
    hour = int(hourA) + int(hourB) + shour

    # 分の方は0埋め
    return('%s:%s' % (str(hour), str(min).zfill(2)))

今日の日付を得る

ファイル名に日付を入れたいときなどに。

# 日付のみ
return(format(dt.today(), '%Y%m%d'))
# 時刻を秒まで
return(format(dt.today(), '%Y%m%d%H%M%S'))

日付シリアルにスラッシュを入れる

なんてことはない、YYYYMMDDをYYYY/MM/DDにするだけの関数
しかしいざ作ろうとするとスライスの勘定がめんどうくさい。

def get_slashed_date(dirty_date):
    sanity_date = (
        dirty_date[0:4] + "/" +
        dirty_date[4:6] + "/" +
        dirty_date[6:]
    )
    return sanity_date

Last Update: 2021-12-28