LoginSignup
1
3

More than 1 year has passed since last update.

【Python】datetime型のリストを作成

Last updated at Posted at 2020-10-27

注意事項

  • 自分用の簡単なまとめであり,説明はほとんどありません.
  • 内容は時間があるときに補充します.

心の声

  • datetimeパッケージにデフォルトで用意されていれば良かったのに...

使用コード

import datetime

def list_date(start_date='2020-01-01', end_date='2020-01-31'):

    # str型をdatetime型に変換する.
    start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d')
    end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d')

    # 開始日と終了日の間隔を計算する.
    days = (end_date - start_date).days

    # 間隔の分だけfor文を回し,日を追加する.
    tmp_date = start_date
    date = [tmp_date]
    for i in range(days):
        tmp_date += datetime.timedelta(days=1)
        date.append(tmp_date)

    return date

使用例

date = list_date(start_date='2020-01-01', end_date='2020-01-05')
print(date)
実行結果
[datetime.datetime(2020 1, 1, 0, 0),
 datetime.datetime(2020 1, 2, 0, 0),
 datetime.datetime(2020 1, 3, 0, 0),
 datetime.datetime(2020 1, 4, 0, 0),
 datetime.datetime(2020 1, 5, 0, 0)]

コメントより

  • ジェネレータ関数として実装する書き方を@shiracamusさんから教えていただきました.
    • ジェネレータ関数なので,yieldの部分で関数が一時停止し,呼び出し元に処理が戻ります.
      • cf) range関数
  • 引数stepには,timedelta関数の引数が入ります.
    • weeks / days / hours / minutes / seconds / milliseconds / microseconds
      • ex) days=1
  • for文でrange関数のように使うこともできますし,リスト関数でリストに格納することもできます.
import datetime

def date_range(start_date='2020-01-01', end_date='2020-01-31', **step):
    
    # str型をdatetime型に変換する.
    start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d')
    end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d')
    
    # timedelta型の間隔を定義する.デフォルトは1日おき.
    step = datetime.timedelta(**(step or dict(days=1)))
    
    # while文を回し,yieldでジェネレータを返す.
    date = start_date
    while date < end_date:
        yield date
        date += step

使用例

date = list(date_range('2020-01-01', '2020-01-05', days=1, hours=12))
print(date)
実行結果
[datetime.datetime(2020, 1, 1, 0, 0),
 datetime.datetime(2020, 1, 2, 12, 0),
 datetime.datetime(2020, 1, 4, 0, 0)]
1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3