Python datetime 日付の計算、文字列変換をする方法 strftime, strptime【決定版】

# <strong>Python datetime 日付の計算、文字列変換をする方法 strftime, strptime</strong>

> 2019/08/02 最終更新

ここではPython標準の`datetime`による、日付の取得・計算 <strong>timedelta()</strong>, 文字列への変換 <strong>strftime()</strong>, 文字列からの変換 <strong>strptime()</strong> 方法を説明します。


MacにおけるPythonの環境構築はこちらをご覧ください。
[MacにPython3をインストールし環境構築【決定版】](http://qiita.com/7110/items/1aa5968022373e99ae28)

<!-- 
    How to get current time and each parameters
-->
## 現在時刻と日時の各値を取得
`datetime`から現在時刻と日時の各値（年, 月, 日, 時, 分, 秒, 曜日）を取得します。

``` Python
import datetime


"""
datetimeから現在日時を取得
"""
now = datetime.datetime.now() # => datetime.datetime(2019, 8, 2, 1, 57, 9, 99551)


"""
datetimeから各値を取得
    年, 月, 日, 時, 分, 秒
"""
now.year # => 2019
now.month # => 8
now.day # => 2
now.hour # => 1
now.minute # => 57
now.second # => 9


"""
datetimeから曜日を取得
    weekdayと曜日の対応
    0: 月, 1: 火, 2: 水, 3: 木, 4: 金, 5: 土, 6: 日
"""
now.weekday() #　=> 4
```
year, month, day, hour, minute, second の他に microsecond の取得も可能です。


<!-- 
    How to do datetime's addition and subtraction
-->
## datetimeの日付の計算（足し算、引き算）
<strong>timedelta()</strong>メソッドを用いて、`datetime`で日付の足し算, 引き算の計算を行います。年月日が変化するような計算も可能です。

``` Python
import datetime


"""
datetimeの日付の計算
     weeks, days, hours, minutes, seconds
"""
now = datetime.datetime.now() # => datetime.datetime(2019, 8, 2, 1, 59, 33, 338054)

# 1週 加算
now + datetime.timedelta(weeks=1) # => datetime.datetime(2019, 8, 9, 1, 59, 33, 338054)
# 10日 減算
now - datetime.timedelta(days=10) # => datetime.datetime(2019, 7, 23, 1, 59, 33, 338054)
# 10時間 加算
now + datetime.timedelta(hours=10) # => datetime.datetime(2019, 8, 2, 11, 59, 33, 338054)
# 10分 減算
now - datetime.timedelta(minutes=10) # => datetime.datetime(2019, 8, 2, 1, 49, 33, 338054)
# 10秒 加算
now + datetime.timedelta(seconds=10) # => datetime.datetime(2019, 8, 2, 1, 59, 43, 338054)

# 7日, 1時間, 10分 加算
now + datetime.timedelta(days=7, hours=1, seconds=10) # => datetime.datetime(2019, 8, 9, 2, 59, 43, 338054)
```
weeks, days, hours, minutes, seconds の他に milliseconds, microseconds の計算も可能です。


<!-- 
    How to change datetime and date to string
-->
## datetime, dateから文字列へ変換
<strong>strftime()</strong>メソッドを用いて、`datetime`, `date`から文字列へ変換を行います。

``` Python
import datetime


"""
datetimeからstringへ変換
"""
now = datetime.datetime.now()


# 例1
now.strftime('%Y-%m-%d %H:%M:%S') # => '2019-08-02 02:20:43'
# 例2
now.strftime('%Y年%m月%d日') # => '2019年08月02日'
# 例3
now.strftime('%A, %B %d, %Y') # => 'Friday, August 02, 2019'
```


<!-- 
    How to change string to datetime and date
-->
## 文字列からdatetime, dateへ変換
<strong>strptime()</strong>メソッドを用いて、文字列から`datetime`, `date`へ変換を行います。

``` Python
import datetime


"""
stringからdatetimeへ変換
"""
# 例1
string_date_1 = '2019/08/02'
datetime.datetime.strptime(string_date_1, '%Y/%m/%d') # => datetime.datetime(2019, 8, 2, 0, 0)
# 例2
string_date_2 = '2019/08/02 2:03:07'
datetime.datetime.strptime(string_date_2, '%Y/%m/%d %H:%M:%S') # => datetime.datetime(2019, 8, 2, 2, 3, 7)
# 例3
string_date_3 = '2019-08-02 12:06:19'
datetime.datetime.strptime(string_date_3, '%Y-%m-%d %H:%M:%S') # => datetime.datetime(2019, 8, 2, 12, 6, 19)


"""
string, datetimeからdateへ変換
"""
string_date = '2019/08/02 12:06:19'
# string to datetime
dt = datetime.datetime.strptime(string_date, '%Y/%m/%d %H:%M:%S') # => datetime.datetime(2019, 8, 2, 12, 6, 19)
# datetime to date
datetime.date(dt.year, dt.month, dt.day) # => datetime.date(2019, 8, 2)
```


<!-- 
    summary
-->
## まとめ
`datetime`による日時の取得や計算、文字列からの変換方法の説明でした。
`datetime`型は、`matplotlib`や`plotly`等でグラフを作成する際の軸にもそのまま使えるので便利です。  

[datetimeに関する公式ドキュメント](https://docs.python.org/2/library/datetime.html)

**`いいね`**をしていただけるとモチベーションに繋がりますので押していただけると嬉しいです。