【Python】今月の集計をしたい時に使う月初の取得方法
目次
【Python】今月の集計をしたい時に使う月初の取得方法
ここら辺はPHPでも簡単なので簡単にできるだろうと調べたらツボさえ押さえれば簡単でした。
日付処理のおさらい
UNIX時間を取得する場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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型処理の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 するモジュールが変わる点に注意です。
今月月初を取得する
1 2 |
#pythonで月初を算出 datetime.date.today().replace(day=1) |
today()で取得したデータのdayを1にReplaceすると。
ちなみに、PHPの場合は下の感じで出来ます。
1 2 3 4 5 |
#PHPで月初を算出 $startDate = new DateTime('first day of this month'); #こんなのでもOK $first_date = date("Y-m-01"); |
今月末の取得はどうなるか
取得した日のdayを1にReplaceとなると、30/31/28など変動する末日はどうなるか気になります。
1 2 |
#pythonで月末を算出 datetime.date.today().replace(day=calendar.monthrange(dt.year, dt.month)[1]) |
月の最終日 = 指定した月の日数 ですよね。その考えに基づいてカレンダーから日数を取得してDayを置き換えます。
ちなみに、PHPの場合は下の感じで出来ます。
1 2 3 4 5 |
#PHPで月末を算出 $last_date = new DateTime("last day of this month"); #こんなのでもOK $last_date = date("Y-m-t"); |
※t = 指定した月の日数 = 月末
月初を取得できると可能な事
無駄なデータを除外して今月の集計が出来ます。
例えば、売上データが格納されているテーブル内には先月のデータも去年のデータも入っていたりします。
いくらpandasが優れているとはいえ、このすべてのデータに対して月次集計をして最新月を表示するなんてのはサーバーSpecの無駄遣い。今月だけ必要なのであれば今月のデータを先に抽出してしまえばいいのですが、その際に月初と今日というフィルタを使えばOKと言う事です。
1 2 3 4 5 6 |
from datetime d= datetime.date.today() fd = get_first_date(d) SalesData.objects.filter(observation_date__range=[fd, d]) |
まとめ
日付処理って使う機会多いので簡単にできると嬉しいのですが、pythonでは少しめんどくさい手続きをするようです。
Pythonもツボを押さえれば簡単なのですが、こういう所はPHP便利だったなぁと実感します。
-
前の記事
【Bootstrap】かっこいいテンプレ Gentelella を見つけたので解析② 2020.12.10
-
次の記事
Bootstrap:カッコいいカレンダー『daterangepicker』の取扱いを調べた 2020.12.14
コメントを残す