LoginSignup
0
1

More than 3 years have passed since last update.

Pythonで日付を取得操作する

Last updated at Posted at 2020-10-26

目的:日付を思うように操作する

今後スクレイピングで出力したcsvの日付を操作するときに必要だと思ったから。

この記事で得られること

・応用で現在時刻を使用して、作成するcsv名に日付を指定することができる
・csvファイルに記入されているcsvの操作
・date型をstring型にまたその逆もしかり

現在の時刻を出力する

test.py
from datetime import datetime
now = datetime.now()
print(now)



-----result-----
2020-10-26 20:39:01.825495

文字列を日付に変更する方法

test.py
from datetime import datetime

#  2018/11/11 も同様にできる
str_date = '2018年11月11日'



#strptimeは文字列を日付に
#strftimeは日付を文字列に

one_date = datetime.strptime(str_date, '%Y年%m月%d日')
print(one_date)


-----result-----
2018-11-11 00:00:00

過去未来の日付操作

test.py
from datetime import datetime
from datetime import timedelta

str_date = '2018/11/11'
base_date = datetime.strptime(str_date, '%Y/%m/%d')

print(base_date)

-----result-----
2018-11-11 00:00:00
----------------


#10日前
before_10days = base_date - timedelta(days=10)
#10日後
before_10days = base_date - timedelta(days=10)

print(before_10days)


-----result-----
2018-11-01 00:00:00

csvを使用した日付の操作

day.csv
2016-10-01
2016-10-02
2016-10-03
2016-10-04
2016-10-05
2016-10-06
2016-10-07
2016-10-08
2016-10-09
2016-10-10
2016-10-11
2016-10-12
2016-10-13
2016-10-14
day.py
from datetime import datetime

#csv読み込み
with open('day.csv', encoding='utf-8') as f:

    for row in f:
        day = datetime.strptime(row.rstrip(), '%Y-%m-%d')
        print(f'{day:%Y/%m/%d}')





-----result-----
2016/10/02
2016/10/03
2016/10/04
2016/10/05
2016/10/06
2016/10/07
2016/10/08
2016/10/09
2016/10/10
2016/10/11
2016/10/12
2016/10/13
2016/10/14

Python機能

Python3.8の新機能
f'{ 式=}'式そのもの出力ができるようになった。 
書式を出力する場合 f'{ 式=:書式}' 

csvから該当する日付を出力する

test.py
from datetime import datetime
from datetime import timedelta

main_date ='2016-10-12'

#文字列→日付に
base_day = datetime.strptime(main_date,'%Y-%m-%d')

#一週間前の日付
before_7days = base_day - timedelta(days=7)

#csvファイルを選択
with open('day.csv', encoding='utf-8') as f:

    for row in f:

        #        文字列→日付 行末の改行を削除
        day = datetime.strptime(row.rstrip(), '%Y-%m-%d')

        #print(day)
        #2016-10-02 00:00:00
        #2016-10-03 00:00:00
                #~
        #2016-10-14 00:00:00


        #2016-10-12 から7日間該当するものを表示
        if before_7days <= day < base_day:
                #Y/m/d 形式で
            print(f'{day:%Y/%m/%d}')


-----reult-----
2016/10/05
2016/10/06
2016/10/07
2016/10/08
2016/10/09
2016/10/10
2016/10/11


0
1
0

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
0
1