質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2615閲覧

【Python】○ヶ月前の日にちを取得する方法

tanaka_tarou63

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/09 07:09

前提・実現したいこと

現在の日にちから○ヶ月前の日にちをpythonで取得する方法はどのような方法があるでしょうか。
正確に言えば、以下の2ステップで4ヶ月前の月末の日を求める方法が知りたいです。

1,現在の4ヶ月前の年月を求める方法
2,その月の月末を求める方法
(例:2022/3/9の4月前の月末→2021/11の月末→2021/11/30)

timedeltaはdaysまでしか指定できないため、月の日数などを考慮して考えることができませんでした。

該当のソースコード

Python3

1#---------------- 2#4月前の月末を入力 3#---------------- 4 5#今日の日付を取得 6today = datetime.date.today() 7 8#4月前の年月を取得 9 10#4月前の月末を取得 11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/03/09 07:14 編集

(誤解なので撤回)
guest

回答2

0

python で日付を扱うなら dateutil モジュールを使うのが常套手段ですが、使わずに書くと次のようになるでしょう。

python

1import datetime, calendar, math 2 3# 月の最後の日付を取得する 4def get_last_date(dt): 5 return dt.replace(day=calendar.monthrange(dt.year, dt.month)[1]) 6 7# nヶ月前の年月を計算して、year年month月1日を取得する 8def get_diff_months(dt, n): 9 # [1-12]月を[0-11]月にする 10 month = dt.month - 1 11 # nヶ月ずらす 12 month += n 13 # nヶ月ずらして年が変わる量を計算する 14 diff_years = math.floor(month / 12) 15 # nヶ月ずらした後の、年と月を算出する 16 year = dt.year + diff_years 17 month %= 12 18 # [0-11]月を[1-12]月に戻す 19 month += 1 20 return datetime.datetime(year, month, 1) 21 22# nヶ月前の最後の日付を取得する 23def get_diff_months_last_date(dt, n): 24 return get_last_date(get_diff_months(dt, n)) 25 26today = datetime.datetime(2022, 3, 1) 27target = get_diff_months_last_date(today, -4) 28 29print(target)

投稿2022/03/09 07:52

arcxor

総合スコア2857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanaka_tarou63

2022/03/09 08:22

ありがとうございました!dateutilという便利なモジュールを使わなくても書けるのですね。非常に勉強になりましたm(_ _)m
guest

0

ベストアンサー

投稿2022/03/09 07:34

bboydaisuke

総合スコア5339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanaka_tarou63

2022/03/09 08:20

ありがとうございました!timedeltaだけでなくこのような方法もあるのですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問