めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

pythonで日付(タイムスタンプの文字列)から日付の特徴を作成する

タイムスタンプの文字列から、日付に関する特徴(情報)を計算する。 たまに行うのでめも。

必要ライブラリ

こちらから jpholiday をインストール、祝日の判定に使用する。 ありがたい。

from datetime import datetime, date, timedelta
import calendar
import jpholiday
import numpy as np

文字列からタイムスタンプを取得

文字列を %Y/%m/%d (年/月/日) としてパースする。年月日以外の各種ディレクティブ(記号)の意味はドキュメントを参照。

# 2019/6/30から年月日をパース
timestamp_str = '2019/6/30'
t = datetime.strptime(timestamp_str, '%Y/%m/%d')

曜日

datetime --- 基本的な日付型および時間型 — Python 3.7.4 ドキュメント

# 月:0 ~ 日:6 のint型で取得
weekday = t.weekday()

祝日フラグ

holidayflag = jpholiday.is_holiday(t.date())

次の日が休日

beginofh = jpholiday.is_holiday(t.date()+ timedelta(days=1)) or (t.date() + timedelta(days=1)).weekday()>4

次の日が平日

endofh = not(jpholiday.is_holiday(t.date()+ timedelta(days=1))) and (t.date() + timedelta(days=1)).weekday()==0

元旦から何日目か

tm_ydayに年度始めからの日数が保存されている。tm_zoneなど他のものは上記ドキュメント参照。

dayofyear = t.timetuple().tm_yday

年と週番号(元旦から第何週目か)

date.isocalendar()はISO 年、ISO 週番号、ISO 曜日を返す。

year, weekofyear, _ = t.isocalendar()

月と日

month, day = t.month, t.day

年度始めから何日目か

年度始めからの日数の差分を求める。

# X年4月1日からの経過日数
frombiginofyear = (t.date() - datetime(t.year-(t.month<4)*1, 4, 1).date()).days

その月の平日と休日の一覧

# 特定の年月の平日・休日一覧を取得
def getdaytypelistfromYM(year, month):
    weekdays, holydays = [], []
    for i in range(calendar.monthrange(year, month)[1]):
        if datetime(year, month, i+1).weekday()<5 and not jpholiday.is_holiday(date(year, month, i+1)):
            # 平日の場合
            weekdays += [i+1]
        else:
            # 休日・祝日
            holydays += [i+1]
    return weekdays, holydays

weekdays, holydays = getdaytypelistfromYM(year, month)

その月に平日と休日が何日あるか

上記「その月の平日と休日」のリストの長さ。

weekdays, holydays = getdaytypelistfromYM(year, month)
numofweekdays, numofholydays = len(weekdays), len(holydays)

一年前の今日に一番近い同じ曜日の日付

nearestwd = date(year-1, month, day)
for i in range(4):
    # 一年前 + i日後の曜日と比較
    if weekday == (nearestwd + timedelta(days=i)).weekday():
        nearestwd = date(year-1, month, day) + timedelta(days=i)
        break
    # 一年前 - i日後の曜日と比較
    if weekday == (nearestwd + timedelta(days=-i)).weekday():
        nearestwd = date(year-1, month, day) + timedelta(days=-i)
        break

特定の日付からの経過日数

# 2017/6/30 から何日経過したか
daydiff = (t.date() - datetime(2017, 6, 30).date()).days

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

全体

gist.github.com

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。