[python3] 日付、日時データの取り扱い

Posted on 2019/03/20 in programming , Updated on: 2019/04/02

インポート

Python で日付型データを利用する際には、datetimeモジュールをインポートする。

import datetime

現在の日付と時間

日付までを取り出す際は、datetime.date関数を、時間まで取り出す際は、datetime.datetime関数を使う。

today = datetime.date.today()
print(today)
# 2019-04-01

now = datetime.datetime.now()
print(now)
# 2019-04-01 18:00:00.000000

現在の年や月などを指定して取り出し

各要素の取り出し方は、.year等を datetime型オブジェクトに渡す。

now = datetime.datetime.now()

# 年を表示
print(now.year)
# 2019

# 時間を表示
print(now.hour)
# 18
メソッド 取り出される値
now.year
now.month
now.day
now.hour 時間
now.minute
now.second
now.microsecond マイクロ秒

日付の計算

datetime.timedelta()メソッドを使って、日付の足し算や引き算が可能。引数には、差分を取りたい値を指定する。また、複数の引数を渡すことも可能。

today = datetime.date.today()
print(today)
# 2019-04-01

tomorrorw = today + datetime.timedelta(days=1)
print(tomorrow)
# 2019-04-02

now = datetime.datetime.now()
print(now)
# 2019-04-01 18:00:00.000000

next_week_2hours_ago = now + datetime.timedelta(weeks=1, hours=2)
print(next_week_2hours_ago)
# 2019-04-08 20:00:00.000000
引数 差分
weeks=1 1週
days=1 1日
hours=1 1時間
minutes=1 1分
seconds=1 1秒
microseconds=1 マイクロ1秒

日付のフォーマット

datetime のデフォルトでは、today() は "2019-04-01" 形式で出力される。.format()関数を利用して、フォーマットを自由に変更できる。

today1 = datetime.date.today()
print(today1)
# 2019-04-01

today2 = "{0:%Y/%m/%d}".format(today1)
print(today2)
# 2019/04/01

日付型を文字列に

datetime 型から string 型への変換。

before = datetime.datetime.now()
after = before.strftime('%Y/%m/%d %H:%M:%S')

print(type(before), before)
# <class 'datetime.datetime'> 2019-04-01 18:00:00.000000

print(type(after), after)
# <class 'str'> 2019/04/01 18:00:00
````

## 文字列を日付型に

string 型から datetime 型への変換。

```python
before = '2019-04-01 18:00:00'
after = datetime.datetime.strptime(before, '%Y-%m-%d %H:%M:%S')

print(type(before), before)
# <class 'str'> 2019-04-01 18:00:00

print(type(after), after)
# <class 'datetime.datetime'> 2019-04-01 18:00:00

日時型から日付型へ

before = datetime.datetime.now()
after = datetime.date(before.year, before.month, before.day)

print(type(before), before)
# <class 'datetime.datetime'> 2019-04-01 18:00:00.000000

print(type(after), after)
# <class 'datetime.date'> 2019-04-01