こんにちは!ライターの遠藤です。
今日は、datetimeについて解説させていただきます。datetimeは、日付や時刻を扱うモジュールです。
日時の足し引きをしたい
指定した形式で日時を表示したい
今回の記事では上記のような疑問にお応えする為、
- 【基礎】datetimeモジュールとは何か
- 【基礎】日時の取得方法
- 【応用】datetimeモジュールの応用的な使い方
を紹介します。日付・時刻を扱う機会は様々なシステムやアプリケーションで数多くあるので、ぜひここで覚えていってください!
なお、Pythonの記事については、こちらにまとめています。
datetimeモジュールとは?
まずはじめにdatetimeモジュールの概要を理解しましょう。先述の通り、datetimeは日付や時刻を使う為のモジュールです。
現在時刻の取得から日時の計算、指定した形式での表示といった事が可能です。datetimeモジュールには主に以下のようなクラスがあります。
クラスの種類 | 用途 |
date | 日付を扱う |
time | 時間を扱う |
datetime | 日時を扱う |
timedelta | 時間差を扱う |
以降では、datetimeモジュールを使ってどのように日時を扱う事ができるか、愚弟的な方法を紹介します。
【基礎】日時の取得方法
現在の日時を取得する
それでは、datetimeモジュールを使って、現在の日時を取得してみましょう。datetimeモジュールを使うには、まずインポートをする必要があります。
import datetime
これでdatetimeモジュールが使えるようになりました。現在の日時を取得する方法は以下2つです。
- 現在の日付を取得:datetime.date.today
- 現在の日時を取得:datetime.datetime.now
実際のコードは以下のようになります。
#! /usr/bin/env python # coding: UTF-8 import datetime today = datetime.date.today() print(today) now = datetime.datetime.now() print(now) now2 = datetime.datetime.utcnow() print(now2)
実行結果:
2018-08-04 2018-08-04 14:38:11.656866 2018-08-04 05:38:11.656866
上記のように、todayでは現在の年月日、nowではtodayに加えて現在のマイクロ秒までの時刻を取得する事ができます。utcnowはUTC時間を取得できます。
なお、戻り値は文字列型ではないので注意です。対応策に関しては後述の“フォーマットを指定して表示する”や“日付型⇄文字列型を変換する”で表示や変換の方法を紹介していますので、そちらをご確認ください。単純に表示したいだけの方は、str()で変換すれば表示できます。
欲しい要素だけを取得する
現在の日時を取得しましたが、日付だけで十分だったり、特定の要素だけが必要となるケースもあります。そんな場合のため、欲しい要素だけを取り出す方法を確認しましょう。要素ごとに値を取得する方法は、以下のようになります。
#! /usr/bin/env python # coding: UTF-8 import datetime now = datetime.datetime.now() today = datetime.date.today() print(today.year) print(today.month) print(today.day) now = datetime.datetime.now() print(now.year) print(now.month) print(now.day) print(now.hour) print(now.minute) print(now.second) print(now.microsecond)
実行結果:
2018 8 4 2018 8 4 14 58 46 641462
このようにして、それぞれの要素を取得できます。
【応用】datetimeモジュールの応用的な使い方
以降では、dateモジュールの応用的な使い方を紹介します。
フォーマットを指定して表示する
“2018-08-04″を”2018/08/04*と表示したり、”14:58″を”2時58分”と表示したい場合は、以下のようにします。
today = datetime.date.today() today_format = "{0:%Y/%m/%d}".format(today) print(today_format) now = datetime.datetime.now() now_format = "{0:%I時%M分}.format(now) print(now_format)
実行結果:
2018/08/04 02時58分
上記のように”format()”を使う事によって、任意のフォーマットに変換する事が可能です。また、%Yなどの主な書式化コードは以下になります。
- %y : 西暦(下2桁)
- %Y : 西暦(4桁)
- %m : 月
- %d : 日
- %H : 時(24時間表記)
- %I : 時(12時間表記)
- %M : 分
- %S : 秒
- %f : マイクロ秒
formatについて詳しく知りたい方は、以下を参照してください。
日付型⇄文字列型を変換する
datetimeモジュールで取得した値は日付型で、文字列型ではありません。以下をご確認ください。
#! /usr/bin/env python # coding: UTF-8 import datetime now = datetime.datetime.now() print(type(now))
実行結果:
<type 'datetime.datetime'>
typeはオブジェクトの型を確認する際に使う関数です。実行結果を確認すると、datetime.datetimeが返ってきていますね。ここでは、文字列型と相互に変換する方法を紹介致します。
日付型→文字列型へ変換する
まず日付型を文字列型へ変換する方法を確認しましょう。日付型を文字列型へ変換するには、strftime()を使います。それでは、実際のコードを確認しましょう。
#! /usr/bin/env python # coding: UTF-8 import datetime now_date = datetime.datetime.now() now_str = datetime.datetime.strftime(now_date, '%Y-%m-%d') print(type(now_date)) print(type(now_str))
実行結果:
<type 'datetime.datetime'> <type 'str'>
文字列型に変換された事がわかりますね!
文字列型→日付型へ変換する
続いて、文字列型を日付型へ変換する方法を紹介します。この場合は、strptime()を使います。実際のコードは以下になります。
#! /usr/bin/env python # coding: UTF-8 import datetime now_str = "2018-08-04" now_date = datetime.datetime.strptime(now_str, '%Y-%m-%d') print(type(now_str)) print(type(now_date))
実行結果:
<type 'str'> <type 'datetime.datetime'>
文字列型が日付型に変換されました。
日時の差を計算する
日時を扱ううえで、日時の足し引きは重要になってくるかと思います。時刻を計算する場合や月をまたいで日付の差を調べるときなんかは特に計算が面倒ですよね。そんな悩みはdatetimeで解決できます!
使う関数はtimedelta()です。これは時間や日付の”差”を入れる事で、日付型同士足し引きできるようになるものです。入力できる引数は以下のようになります。
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
それでは、実際に差を出してみましょう。
#! /usr/bin/env python # coding: UTF-8 import datetime now = datetime.datetime.now() delta = datetime.timedelta(days=7) print(now-delta)
実行結果:
2018-07-28 16:18:23.741220
日付をまたいで処理できましたね。もちろん日付をまたいだ時刻計算も可能です!
まとめ
いかがでしたでしょうか?今回の記事では、
- 【基礎】datetimeモジュールとは何か
- 【基礎】日時の取得方法
- 【応用】datetimeモジュールの応用的な使い方
を紹介致しました。datetimeモジュールは、日付や時刻を扱ううえで大変重要な役割を持っています。ここで主な使い方を覚えて、ぜひ活用してみてください!