めも

メモ.

pythonで2つの日付・月・年の間のすべての日付・月・年を等間隔に取得したい

タイトル通りです。 指定した二つの日付の間の全ての日を取得したい。 また、指定した日付の間の全ての月や年も取得したい。

必要なモジュール

from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta

dateutil.relativedeltaにて月・年の時間差分を計算することができる。 今回は年月日のみの計算だが、year, month, day, hour, minute, second, microsecondのオプションが用意されている. timedelta では日付の差分までしか取得できないので、年や月の足し引きを行いたい場合は dateutil.relativedelta を使用することになる.

コード

二つのタイムスタンプを受け取り、 day ならば二つの間の間の全ての日付を、 month ならば二つの間の間の全ての月を、 yearならば二つの間の間の全ての年を出力します.

dateutil.relativedeltaで終わりの日付を超えるまで足し続けるようにした方がよかったですね.

gist.github.com

出力例

get_alldate_between_startend(date(2010, 10, 8), date(2010, 10, 12), tsbase="day")

[datetime.date(2010, 10, 8),
 datetime.date(2010, 10, 9),
 datetime.date(2010, 10, 10),
 datetime.date(2010, 10, 11),
 datetime.date(2010, 10, 12)]

get_alldate_between_startend(date(2010, 12, 8), date(2013, 3, 9), tsbase="month")

# 出力
[datetime.date(2010, 12, 1),
 datetime.date(2011, 1, 1),
 datetime.date(2011, 2, 1),
 datetime.date(2011, 3, 1),
 datetime.date(2011, 4, 1),
 datetime.date(2011, 5, 1),
 datetime.date(2011, 6, 1),
 datetime.date(2011, 7, 1),
 datetime.date(2011, 8, 1),
 datetime.date(2011, 9, 1),
 # ... 省略 ...
 datetime.date(2013, 7, 1),
 datetime.date(2013, 8, 1),
 datetime.date(2013, 9, 1),
 datetime.date(2013, 10, 1),
 datetime.date(2013, 11, 1),
 datetime.date(2013, 12, 1),
 datetime.date(2013, 1, 1),
 datetime.date(2013, 2, 1),
 datetime.date(2013, 3, 1)]

get_alldate_between_startend(date(2010, 12, 8), date(2013, 3, 9), tsbase="year")

# 出力
[datetime.date(2010, 1, 1),
 datetime.date(2011, 1, 1),
 datetime.date(2012, 1, 1),
 datetime.date(2013, 1, 1)]

関連:日付特徴の作成

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。