【Python】今月の集計をしたい時に使う月初の取得方法

【Python】今月の集計をしたい時に使う月初の取得方法

ここら辺はPHPでも簡単なので簡単にできるだろうと調べたらツボさえ押さえれば簡単でした。

日付処理のおさらい

UNIX時間を取得する場合

import time

"""エポックからの秒数を浮動小数点数で返す"""
ut = time.time()

"""現在のスレッドのシステムおよびユーザーの CPU 時間の合計値 (小数点以下ありの秒数) を返す"""
ut = time.thread_time()

”””threadtimeをナノ秒で返す※INTになる”””
ut = time.thread_time_ns()

"""エポックからの秒数をナノ秒で返す※INTになる"""
ut = time.time_ns()

"""ライブラリルーチンで使用される時間変換ルールをリセットする"""
ut = time.tzset()

DateTime型処理の場合

import datetime

"""現在の日付+時刻を取得"""
dt_now = datetime.datetime.now()

"""今日の日付を取得"""
d_today = datetime.date.today()

"""現在の時間だけ取得 ※タイムゾーン無視"""
t_now = datetime.datetime.now().time()

"""現在の時間だけ取得 ※タイムゾーン活用"""
dt_now_utc_aware = datetime.datetime.now().timetz()

エポック秒か否かで import するモジュールが変わる点に注意です。

今月月初を取得する

#pythonで月初を算出
datetime.date.today().replace(day=1)

today()で取得したデータのdayを1にReplaceすると。
ちなみに、PHPの場合は下の感じで出来ます。

#PHPで月初を算出
$startDate = new DateTime('first day of this month');

#こんなのでもOK
$first_date = date("Y-m-01");

今月末の取得はどうなるか

取得した日のdayを1にReplaceとなると、30/31/28など変動する末日はどうなるか気になります。

#pythonで月末を算出
datetime.date.today().replace(day=calendar.monthrange(dt.year, dt.month)[1])

月の最終日 = 指定した月の日数 ですよね。その考えに基づいてカレンダーから日数を取得してDayを置き換えます。
ちなみに、PHPの場合は下の感じで出来ます。

#PHPで月末を算出
$last_date = new DateTime("last day of this month");

#こんなのでもOK
$last_date = date("Y-m-t");

※t = 指定した月の日数 = 月末

月初を取得できると可能な事

無駄なデータを除外して今月の集計が出来ます。

例えば、売上データが格納されているテーブル内には先月のデータも去年のデータも入っていたりします。

いくらpandasが優れているとはいえ、このすべてのデータに対して月次集計をして最新月を表示するなんてのはサーバーSpecの無駄遣い。今月だけ必要なのであれば今月のデータを先に抽出してしまえばいいのですが、その際に月初と今日というフィルタを使えばOKと言う事です。

from datetime

d= datetime.date.today()
fd = get_first_date(d)

SalesData.objects.filter(observation_date__range=[fd, d])

まとめ

日付処理って使う機会多いので簡単にできると嬉しいのですが、pythonでは少しめんどくさい手続きをするようです。

Pythonもツボを押さえれば簡単なのですが、こういう所はPHP便利だったなぁと実感します。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください