[解決済み] Pythonでdatetimeオブジェクトを1ヶ月インクリメントする簡単な方法はありますか?重複] [重複
質問
そこで、私はdatetimeオブジェクトを1ヶ月ずつ増加させる方法を見つけようとしています。しかし、これはそれほど単純ではないようです、によると この質問 .
みたいなのを期待してたんだけど。
import datetime as dt
now = dt.datetime.now()
later = now + dt.timedelta(months=1)
でも、それじゃダメなんです。また、可能であれば、次の月の同じ日(または最も近い代替)に移動できることを望んでいました。たとえば、1 月 1 日に設定された datetime オブジェクトは 2 月 1 日に増分するのに対し、2 月 28 日に設定された datetime オブジェクトは 3 月 28 日または何かとは対照的に 3 月 31 日に増分する、などです。
明確には、2 月 28 日は月の最終日であるため、(通常は)3 月 31 日にマップされ、したがって、次の月の最終日に移動するはずです。そうでなければ、直接リンクになります。増分は、同じ番号の日を持つ次の月の日に移動するはずです。
Pythonの現在のリリースでこれを行うための簡単な方法はありますか?
どのように解決するのですか?
チェックアウト
from dateutil.relativedelta import *
を使用すると、日付に特定の時間を追加するために、引き続き
timedelta
を使い続けることができます。
import datetime
from dateutil.relativedelta import *
use_date = datetime.datetime.now()
use_date = use_date + datetime.timedelta(minutes=+10)
use_date = use_date + datetime.timedelta(hours=+1)
use_date = use_date + datetime.timedelta(days=+1)
use_date = use_date + datetime.timedelta(weeks=+1)
を使うか、あるいは
relativedelta
use_date = use_date+relativedelta(months=+1)
use_date = use_date+relativedelta(years=+1)
来月の最終日に向けて
use_date = use_date+relativedelta(months=+1)
use_date = use_date+relativedelta(day=31)
今、これは2016/02/29を提供します
は来月の最終日です。
use_date = use_date+relativedelta(months=+1)
use_date = use_date+relativedelta(day=31)
use_date = use_date+relativedelta(days=-1)
翌月の最終金曜日
use_date = use_date+relativedelta(months=+1, day=31, weekday=FR(-1))
来月第2火曜日
new_date = use_date+relativedelta(months=+1, day=1, weekday=TU(2))
mrroot5 が指摘するように、dateutil の
rrule
関数を適用することができ、日付の出現を必要とする場合、より大きな利益をもたらします。
例えば
先月の末日から9ヶ月分の計算をする。
次に、その月の第2火曜日をそれぞれ計算する。
from dateutil.relativedelta import *
from dateutil.rrule import *
from datetime import datetime
use_date = datetime(2020,11,21)
#Calculate the last day of last month
use_date = use_date+relativedelta(months=-1)
use_date = use_date+relativedelta(day=31)
#Generate a list of the last day for 9 months from the calculated date
x = list(rrule(freq=MONTHLY, count=9, dtstart=use_date, bymonthday=(-1,)))
print("Last day")
for ld in x:
print(ld)
#Generate a list of the 2nd Tuesday in each of the next 9 months from the calculated date
print("\n2nd Tuesday")
x = list(rrule(freq=MONTHLY, count=9, dtstart=use_date, byweekday=TU(2)))
for tuesday in x:
print(tuesday)
Last day
2020-10-31 00:00:00
2020-11-30 00:00:00
2020-12-31 00:00:00
2021-01-31 00:00:00
2021-02-28 00:00:00
2021-03-31 00:00:00
2021-04-30 00:00:00
2021-05-31 00:00:00
2021-06-30 00:00:00
2nd Tuesday
2020-11-10 00:00:00
2020-12-08 00:00:00
2021-01-12 00:00:00
2021-02-09 00:00:00
2021-03-09 00:00:00
2021-04-13 00:00:00
2021-05-11 00:00:00
2021-06-08 00:00:00
2021-07-13 00:00:00
rrule
は、特定の日に発生する次の日付を見つけるために使われるかもしれません。
例:月曜日に発生する次の1月1日(今日が2021年11月4日であると仮定した場合)
from dateutil.relativedelta import *
from dateutil.rrule import *
from datetime import *
year = rrule(YEARLY,dtstart=datetime.now(),bymonth=1,bymonthday=1,byweekday=MO)[0].year
year
2024
または、次の 5 つの 1 月 1 日が月曜日に発生する場合。
years = rrule(YEARLY,dtstart=datetime.now(),bymonth=1,bymonthday=1,byweekday=MO)[0:5]
for i in years:print(i.year)
...
2024
2029
2035
2046
2052
これは決して利用可能なものの完全なリストではありません。 ドキュメントはこちらでご覧になれます。 https://dateutil.readthedocs.org/en/latest/
関連
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] リストの要素を値で削除する簡単な方法はありますか?
-
[解決済み] Pythonで日付をdatetimeに変換する
-
[解決済み] PyMongoで.sortを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ライブラリを使わずにpythonでdatetimeをカスタム月単位でインクリメントする方法【重複あり
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?