[解決済み] 2つの日付の間の月数を求める最良の方法
質問
私はPythonで2つの日付の間の月を正確に見つけることができる必要があります。私は動作するソリューションを持っていますが、それは非常に良い(エレガントなように)または高速ではありません。
dateRange = [datetime.strptime(dateRanges[0], "%Y-%m-%d"), datetime.strptime(dateRanges[1], "%Y-%m-%d")]
months = []
tmpTime = dateRange[0]
oneWeek = timedelta(weeks=1)
tmpTime = tmpTime.replace(day=1)
dateRange[0] = tmpTime
dateRange[1] = dateRange[1].replace(day=1)
lastMonth = tmpTime.month
months.append(tmpTime)
while tmpTime < dateRange[1]:
if lastMonth != 12:
while tmpTime.month <= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
else:
while tmpTime.month >= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
ここでやっていることは、2つの日付を受け取って、isoフォーマットからpythonのdatetimeオブジェクトに変換しているところです。そして、開始のdatetimeオブジェクトに週を追加してループし、月の数値が大きいかどうかをチェックします(月が12月でない場合は、日付が小さいかどうかをチェックします)。
完全に動作しますが、良い方法とは思えません...。
どのように解決するのですか?
2018-04-20に更新しました。 は、OPの@Joshkunzが求めていたのはファインディングだったようです。 どの月 を求めるのではなく、「2つの日付の間に何ヶ月あるのか」を求めているようです。そのため、なぜ @JohnLaRooy が100回以上アップヴォートされているのかがよくわかりません。Joshkunzは、元の質問の下のコメントで、実際の日付[または月]が欲しいことを示し、代わりに 月の合計数 .
というわけで、質問は、2つの日付の間について
2018-04-11
から
2018-06-01
Apr 2018, May 2018, June 2018
の間にある場合はどうでしょうか?
2014-04-11
から
2018-06-01
? とすると、答えは
Apr 2014, May 2014, ..., Dec 2014, Jan 2015, ..., Jan 2018, ..., June 2018
というわけで、何年も前に次のような疑似コードを持っていたわけです。それは単に、2 つの月をエンド ポイントとして使用し、一度に 1 か月ずつ増分してループすることを提案したものです。Joshkunz は、"month" が欲しいと言いましたが、彼は "dates" も欲しいと言い、正確に分からずに、正確なコードを書くことは困難でしたが、アイデアは、終点をループする 1 つの単純なループを使用し、一度に 1 か月ずつ増加させることです。
8年前の2010年の答えです。
1週間足すと、およそ4.35倍の仕事をすることになります。 なぜそうしないのか。
1. get start date in array of integer, set it to i: [2008, 3, 12],
and change it to [2008, 3, 1]
2. get end date in array: [2010, 10, 26]
3. add the date to your result by parsing i
increment the month in i
if month is >= 13, then set it to 1, and increment the year by 1
until either the year in i is > year in end_date,
or (year in i == year in end_date and month in i > month in end_date)
は、今のところ pseduo のコードだけで、テストはしていませんが、同じ線上のアイデアはうまくいくと思います。
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] 2つの日付の間の日数を求める
-
[解決済み] 2つの日付の間の日数を計算する方法
-
[解決済み] 2 つの日付の間にあるオブジェクトを検索する MongoDB
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] PHPを使用して2つの日付の差を計算する方法は?
-
[解決済み] Pandasがラベルで選択すると、Seriesを返す場合とDataFrameを返す場合があります。
最新
-
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で日付に日数を足す
-
[解決済み] 複数のプロットを1つのPDFファイルに保存する
-
[解決済み] Pythonでnumpy.linalg.eigを使用した後の固有値と関連する固有ベクトルのソート
-
[解決済み] 集合からランダムな選択? python
-
[解決済み] re.sub置換パターンにおけるキャプチャグループの後方参照への対応
-
[解決済み] Pythonで関数の引数として辞書の項目を渡すには?重複
-
[解決済み] ne__は__eq__の否定として実装されるべきか?
-
[解決済み] sqlalchemy の declarative ORM 拡張機能で複数カラムのインデックスを使用する場合
-
[解決済み] Pythonでファイルがバイナリ(非テキスト)かどうかを検出するにはどうしたらいいですか?
-
[解決済み] PythonによるCURLの代替