Data Science|Basics

Pythonのdatetimeを使いこなそう!現在日時取得から文字列変換まで

Pythonを学習していると

「datetimeモジュールの使い方がわからない」
「もっと網羅的にdatetimeについて知りたい」

などといった悩みを抱えることもありますよね。
そこで今回はdatetimeモジュールに関する知識や使い方を詳しく説明していきます。
ぜひ最後までご覧くださいね。


本ブログを運営しているTech Teacherは、業界初のプログラミング家庭教師サービスを提供しています。

その特徴は完全マンツーマン・フルオーダーメイド指導・30分ごとの利用が可能であるところです。

完全マンツーマン

Tech Teacherのマンツーマン指導なら理解できない箇所は何度も分かるまで説明を受けることができます。

フルオーダーメイド指導

Tech Teacherではあらかじめ決められたカリキュラムはありません。そのためご自身の学習状況や学びたいことに合わせた指導が可能です。

一括支払いなし

一般的なプログラミングスクールの料金体制はカリキュラムに対して一括払いですが、Tech Teacherでは利用した分だけの支払いとなります。そのため、大きな費用負担がなく気軽に始めることができます。

Pythonをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

datetimeモジュールについて

「datetimeモジュール」とは、Pythonで日付や時刻に対してさまざまな操作をすることができるモジュールで、現在の時刻の取得から日時の計算、指定した形式での表示などを行うことができますよ。

datetimeモジュールのオブジェクトは以下の通りです。

  • datetime:日付と時刻を扱う
  • date:日付を扱う
  • time:時刻を扱う
  • timedelta:時間差を扱う

ここで、モジュール・オブジェクト・メソッドの関係性を紹介します。

モジュール よく使用する処理があらかじめまとめて定義されているファイル
オブジェクト 文字列・リスト・日付などのことで、データを扱うのに便利な関数を持っている
メソッド オブジェクトが持っている関数

つまり、モジュール・オブジェクト・メソッドの関係性をまとめると次のような階層構造になっていることがわかります。

モジュール 例: datetime
└ オブジェクト 例::datetime
└ メソッド 例::now( ) , strftime( )

それでは、datetimeモジュールに入っている4つのオブジェクトについて説明していきます。

datetimeオブジェクトについて

datetimeオブジェクトは日付と時刻の両方の情報を持っているオブジェクトで、「year」「month」「day」「hour」「minute」「second」「microsecond」などを利用してそれらの情報にアクセスできますよ。

datetimeモジュールを使用するには、「import」を忘れないように注意しましょう。

1. import datetime

datetime . now ( )

datetimeオブジェクトで、現在の日付と時刻を取得するには「datetime . now ( )メソッド」を使用します。

1.  import datetime
2.
3.  dt _ now = datetime . datetime . now ( )
4.  print ( dt _ now )
5.  # 実行結果
6.  2020 – 05 – 18 16 : 34 : 23 . 174812
7.
8.  print ( ‘年:’ , dt _ now . year )
9.  # 実行結果
10. 年:2020
11.
12. print ( ‘月:’ , dt _ now . month )
13. # 実行結果
14. 月:5
15.
16. print ( ‘日:’ , dt _ now . day )
17. # 実行結果
18. 日:18
19.
20. print ( ‘時:’ , dt _ now . hour )
21. # 実行結果
22. 時:16
23.
24. print ( ‘分:’ , dt _ now . minute )
25. # 実行結果
26. 分:34
27.
28. print ( ‘秒:’ , dt _ now . second )
29. # 実行結果
30. 秒:23
31.
32. print ( ‘マイクロ秒:’ , dt _ now . microsecond )
33. # 実行結果
34. マイクロ秒:174812

このように「datetime.datetime.now()」とすることで、変数「dt_now」に現在の日付や時刻を格納できました。この変数に対して「year」などのメソッドを使用することで、年月日時分秒マイクロ秒を取得できますよ。

datetimeオブジェクトのコンストラクタ

datetimeオブジェクトでは、任意の日付や時刻を作成することができますよ。

1. # datetimeオブジェクトのコンストラクタ
2. datetime ( year , month , day , hour=0 , second=0 , maicrosecond=0 , tzinfo=None )
3. # year・month・day以外は省略でき、省略した場合は初期値の0となる

実際にコードを用いて説明していきます。

1.  dt = datetime . datetime ( 2020 , 1 , 1 , 12 , 30 , 20 , 1230
2.  print ( dt )
3.  # 実行結果
4.  2020 – 01 – 01 12 : 30 : 20 . 001230
5.
6.  print ( dt . minute )
7.  # 実行結果
8.  30
9.
10. print ( dt . microsecond )
11. # 実行結果
12. 1230
13.
14. dt = datetime . datetime ( 2020 , 1 , 1 )
15. print ( dt )
16. # 実行結果
17. 2020 – 01 – 01 00 : 00 : 00
18.
19. print ( de . minute )
20. # 実行結果
21. 0

dateオブジェクトについて

dateオブジェクトは日付の情報を持っているオブジェクトで、「year」「month」「day」などの属性にアクセスすることができますよ。

day . today ( )

dateオブジェクトで現在の日付を取得するには「date . today ( )メソッド」を使用します。

1.  d _ today = datetime . date . today ( )
2.  print ( d _ today )
3.  # 実行結果
4.  2020 – 05 – 18
5.
6.  print ( d _ today . year )
7.  # 実行結果
8.  2020
9.
10. print ( d _ today . month )
11. # 実行結果
12. 5
13.
14. print ( d _ today . day )
15. # 実行結果
16. 18

このように、「datetime.date.today()」とすることで、変数「d_today」に現在の日付を格納することができます。この日付型変数に様々なメソッドを使用することで簡単に現在の日付を取得することができますよ。

dateオブジェクトのコンストラクタ

dateオブジェクトのコンストラクタは下記のようになっており、いずれも省略できないので注意しましょう。

1. # すべて必須
2. date ( year , month , day )

実際にコードを用いて説明していきます。

1. d = datetime . date ( 2020 , 1 , 1 )
2. print ( d )
3. # 実行結果
4. 2020 – 01 – 01
5.
6. print ( d. month )
7. # 実行結果
8. 1

このようにすべて必須ですので入力するのを忘れないようにしましょう。

timeオブジェクトについて

timeオブジェクトは時刻の情報を持っているオブジェクトで、「hour」「minute」「second」「microsecond」といった属性にアクセスすることができますよ。

time.time ( )

現在の時刻を取得するには「timeモジュール」をインポートして「time.time( )メソッド」を使用します。

time( )メソッドを使用すると現在のUNIX時間をfloat型で取得できます。UNIX時間とは、UTCの1970年1月1日0時0分0秒からの経過秒数のことです。

1. import time
2.
3. ut = time . time ( )
4.
5. print ( ut )
6. # 実行結果
7. 1590188275.118221

処理の経過時間も測定することができますよ。

timeオブジェクトのコンストラクタ

timeオブジェクトのコンストラクタは次のようになっており、いずれも省略することができます

1. # 省略した場合は0となる
2. time ( hour=0 , minute=0 , second=0 , microsecond=0 , tzinfo=None )

実際にコードを用いて説明していきます。

1.  t = datetime . time ( 12 , 30 , 20 , 1230 )
2.  print ( t )
3.  # 実行結果
4.  12 : 30 : 20 . 001230
5.
6.  print ( t . minute )
7.  # 実行結果
8.  30
9.
10. t = datetime . time ( )
11. print ( t )
12. # 実行結果
13. 00 : 00 : 00

このように省略すると初期値の0になることが分かるでしょう。

timedeltaオブジェクトについて

timedeltaオブジェクトは、2つの日時の時間差や経過時間を表すオブジェクトで、日数・秒数・マイクロ秒数の情報を持っており「days」「seconds」「microseconds」でアクセスできます。

また、「total _ seconds ( )メソッド」でトータル秒数を取得することもできますよ。

timedeltaオブジェクトを使用した引き算・足し算

timedeltaを使用することで日付の引き算や足し算を簡単に行うことができますよ。

実際にコードを用いて説明していきます。

1. today = datetime . date . today ( ) #現在日時はUTC2020-05-18
2. day _ after _ tomorrow = datetime . timedelta ( days = 5 )
3.
4. print ( today + day _ after _ tomorrow )
5. # 実行結果
6. 2020 – 05 – 23

現在の日付2020年5月18日から5日後の日付を表示することができました。
このとき、取得される日時はUTC時刻のため、日本での現地時間と異なることに注意してください。

このようにtimedeltaクラスの引数として任意の数値を渡すことで日時の計算が簡単に行えるようになりますよ。

また、下記のように日付を比較することも簡単ですよ。

1.  tomorrow = today + datetime . timedelta ( days = 1 )
2.  yestarday = today – datetime . timedelta ( days = 1 )
3.
4.  print ( ‘今日は明日よりも後:’ + str ( today > tomorrow ) )
5.  # 実行結果
6.  今日は明日よりも後:False
7.
8.  print ( ‘昨日は今日よりも前:’ + str ( yestarday < today ) )
9.  # 実行結果
10. 昨日は今日よりも前:True

上記のように昨日・今日・明日の日付を作成して比較することもできますよ。

datetimeオブジェクト同士の引き算でtimedeltaオブジェクト作成

datetimeオブジェクト・dateオブジェクトなど、datetimeオブジェクト同士を引き算するとtimedeltaオブジェクトを取得することができます。

1.  today=datetime.datetime.now() – datetime.datetime(1970,1,1)
2.  print ( today )
3.  # 実行結果
4.  18404 days, 23:19:08.702441
5.
6.  print ( today . days )
7.  # 実行結果
8.  18404
9.
10. print ( today . seconds )
11. # 実行結果
12. 83948
13.
14. print ( today . microseconds )
15. # 実行結果
16. 702441
17.
18. print ( today . total _ seconds ( ) )
19. # 実行結果
20. 1590189548.702441

このようにdatetimeオブジェクト同士の引き算でtimedeltaオブジェクトが取得できますよ。

timedeltaオブジェクトのコンストラクタ

timedeltaオブジェクトのコンストラクタは次のようになっており、いずれも省略することができますよ。

1. # 省略した場合は初期値の0となる
2. timedelta ( days=0 , seconds=0 , microseconds=0 , milliseconds=0 , minutes=0 , hours=0 , weeks=0 )

timedeltaオブジェクトが持っている情報は、あくまで「days」「seconds」「microseconds」のみなので注意してください。

1. td _ 1w = datetime . timedelta ( weeks=1 )
2. print ( td _ 1w )
3. # 実行結果
4. 7 days , 0 : 00 : 00
5.
6. print ( td _ 1w . days )
7. # 実行結果
8. 7

strftime( )・strptime( )について

ここからはstrftime( )とstrptime( )について説明していきます。最後に違いやそれぞれの覚え方も紹介しますので、ぜひ最後までご覧くださいね。

strftimeとは

「strftime( )メソッド」とは、「date」「time」または「datetimeオブジェクト」を使用して日付と時刻を表す文字列を返すメソッドです。

使用可能な書式化コードは下記の通りです。

コード 意味
%a ロケールの曜日名を省略形で表示。
%A ロケールの曜日名を表示。
%b ロケールの月名を省略形で表示。
%B ロケールの月名を表示。
%c ロケールの適切な日付および時刻の表示。
%d 10進数で月の始めから何日目かを表示。
%f 10進数でマイクロ秒を表示。
%G ISO weekの内過半数を含んだ西暦表記のISO 8601 year。
%H 10進数で24時間計での時を表示。
%I 10進数で12時間計での時を表示。
%j 10進数で年の初めから何日目かを表示。
%m 10進数で月を表示。
%M 10進数で分を表示。
%p ロケールのAM・PMに対応する文字列。
&S 10進数で秒を表示。
%u 月曜日を1とする10進数表記のISO 8601 weekday。
%U 10進数で年の初めから何週目かを表示。年明けから最初の日曜日までの全ての曜日は0週目。
%w 曜日を10進表記した文字列を表示。表示は日曜日が0・土曜日が6。
%W 10進数で年の初めから何週目かを表示。年明けから最初の月曜日までの全ての曜日は0週目。
%x ロケールの適切な日付を表示。
%X ロケールの適切な時刻を表示。
%y 10進数で上2桁のない西暦年を表示。
%Y 10進数で上2桁が付いている西暦年を表示。
%Z タイムゾーン名。タイムゾーンがない場合は空文字列。
%% 文字「%」を表示。

曜日名や月名の「%a」「%A」「%b」「%B」は、ロケールによって取得できる文字列が違うので気をつけましょう。

では、実際にコードを用いて使い方を説明していきます。

1.  today = datetime.datetime.now()
2.  print ( today . strftime ( ‘%Y – %m – %d %H : %M : %S’ ) )
3.  # 実行結果
4.  2020 – 05 -18 16 : 34 : 23
5.
6.  print ( today . strftime ( ‘%Y%M%d’ )
7.  # 実行結果
8.  200518
9.
10.  print ( today . strftime ( ‘%A , %B %d , %Y’ ) )
11. # 実行結果
12. Monday , May 18 , 2020
13.
14. print ( today . strftime ( ‘%Y年%m月%d日’ ) )
15. # 実行結果
16. 2020年05月18日
17.
18. print ( ‘日番号:’ , today . strftime ( ‘%j’ ) )   # 正月が001とした場合
19. print ( ‘週番号:’ , today . strftime ( ‘%U’ ) )   # 週の始まりは日曜日で正月が00とした場合
20. # 実行結果
21. 139
22. 18

文字列ではなく数値で取得したい場合は「int ( )」で整数に変換すれば数値を取得することができますよ。

strptimeとは

「strptime( )」とは、指定した日付や時刻の文字列から「datetimeオブジェクト」を作成することができるメソッドで、元の文字列に対応する書式化の文字列を指定する必要がありますよ。

1.  date _ str = ‘2020 / 5 / 18 16 : 34’
2.  date _ dt = datetime . datetime . strptime ( date _ str ,  ’%Y / %m / %d %H : %M’ )
3.  print ( date _ dt )
4.  # 実行結果
5.  2020 – 05 – 18 16 : 34 : 00
6.
7.  # strftime( )メソッドを使用することで元の文字列と違うフォーマットで表示
8.  print ( date _ dt . strftime ( ‘%Y年%m月%d日 %H時%M分’ ) )
9.  # 実行結果
10. 2020年05月18日 16時34分

また、datetimeオブジェクトに変換すればtimedeltaオブジェクトとの演算をすることができますので、同じフォーマットで10日前の日付の文字列を作成することもできますよ。

1.  date _ str = ‘2020年5月18日’
2.  date _ format = ‘%Y年%m月%d日’
3.  td _ 10 _ d = datetime . timedelta ( days = 10 )
4.
5.  date _ dt = datetime . datetime . strptime ( date _ str , date _ format )
6.  date _ dt _ new = date _ dt – td _ 10 _ d
7.  date _ str _ new = date _ dt _ new . strftime ( date _ format )
8.
9.  print ( date _ str _ new )
10. # 実行結果
11. 2020年05月18日

strftime( )とstrptime( )の違い

strftime( )・strptime( )、どちらも日付と文字列を変換するメソッドです。どっちがどっちのメソッドだったか悩まないように、ここでは違いや覚え方を紹介します。

「strftime( )」の「f」は「format」からきています。formatとは「書式」という意味があり、書式があるのは文字列のみなので、「日付→文字列」の変換をするメソッドがstrftime( )となります。

また、strftimeの「f」を「from」とみなして考えると「str from time」となります。つまり、時間・日付から文字列という意味になるため、strftimeは日付から文字列に変換するメソッドとなります。

「strptime( )」の「p」は「parse」からきています。parseとは「解析する」という意味があり、解析が必要なのは文字列なので、「文字列→日付」の変換をするメソッドがstrptime( )となります。

また、strptimeは「from」ではない方と覚えると良いでしょう。

それぞれの違いは以下の通りです。

  • strftime:日付から文字列
  • strptime:文字列から日付

「Tech Teacherで!~家庭教師ならではの3つの魅力~」

本Blogを運営するプログラミング家庭教師Tech Teacherは以下のような疑問をすべて解決できるサービスです。

・Pythonの応用をもっと学びたいが、値段が高いスクールに通うのは気が引ける

・目的別に短時間の利用ができるサービスがあったらいいな

比較対象 Tech Teacher プログラミングスクールA社
受講形態
1対1

1対3~5
担当教師
担任教師
×
講座別の講師
カリキュラム
自分専用指導

全員指導
仕事・学業との両立
可能
×
不可能
メンター制度
担任教師

異なる担当
料金
授業分だけ
×
一括払い
初期費用
入会金
22,000円
×
一括払い
528,000円
シミュレーション
(3ヶ月90分の指導を週1で行う)

164,500円
×
528,000円

以下、Tech Teacherの3つの魅力を紹介します。

Pythonをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

1.効率的な学習スタイル

一人のためだけの指導~1対1の完全個別指導~

一般的なプログラミングスクールでは大人数の対面講義や、録画講義の視聴またはオンラインでの受講がメインです。そうなると学習しながら生じた疑問をすぐに聞くことができずに、先に進んでしまい内容をうまく理解できなかったり、作業がうまく進まなかったりします。

家庭教師であれば、マンツーマンのため自分の課題にだけ焦点を当てて指導を受けられるので、1回の授業を濃い時間にすることができます。

無駄のない学習~フルオーダーメイド~

Tech Teacherは一般的なプログラミングスクールと異なり、あらかじめ決められたコースやカリキュラム設定がありません。
一般的なプログラミングスクールのカリキュラムでは、自分が本当に学習したいことを学ぶのにいくつか他の講義を受けなければなりません

Tech Teacherでは生徒様の現状の習熟度・目的・期間に応じてお悩みにダイレクトに刺さる授業を展開し、最短で目標となるゴールを目指せます。

2.自分のペースで学習できる

必要な分だけ~従量課金モデル~

Tech Teacherでは、他にはない「短時間(30分ごと)」の利用が可能です!勉強していてちょっとわからないところ、プログラミング学習のモチベーション維持など様々な疑問や悩みを解決することができます。
授業を受けた分だけ後払いする料金体系(3,960円〜 / 30分)のため、必要な期間に必要な分だけ受講できます。

好きな時間で~相性のいい教師の紹介~

Tech Teacherではあらゆるニーズに対応できる教師陣がいるため、生徒様の希望条件に最適な教師を紹介します。

Tech Teacherを受講している方のほとんどが仕事をしている社会人の方です。TechTeacherの家庭教師なら受講日時や回数を、生徒様のご都合に合わせて柔軟に調整することができ、スキルだけでなく都合の良い時間で指導できる教師を選べます。

3.確実に身につく

挫折しない~担任教師の継続指導~

オンライン・オンデマンドの講義の視聴形態だと、学習に対するモチベーションの維持が課題となり、当初の予定よりも受講期間が伸びたり、挫折したりする恐れがあります。

Tech Teacherでは、担任教師が生徒と二人三脚で学習をするため、学習が大変なときも寄り添ったサポートを受けられます。

具体的には学習計画の管理や受講目的を明確にした上で中間目標を設定し、それに向けた学習の指導をすることでモチベーションの維持を図ります。

いつでも質問できる~チャットサポート(オプション)~

担当教師は授業の時間以外に、チャットサービスを利用して、自分で学習しているときに生じた疑問をすぐに質問して解決することができます。

Javaをマンツーマン指導で学べるプログラミング家庭教師について詳しく知りたい方ほこちら

Tech Teacherへのお問い合わせ

質問のみのお問い合わせも受け付けております。

まとめ

これまでPythonのdatetimeについて説明してきましたが、いかがでしたでしょうか。

今回説明した要点をまとめると以下のようになります。

  • datetimeモジュールとは、日付や時刻に対してさまざまな操作をすることができるモジュール
  • 現在の日付・時刻を取得するにはdatetime.datetime . now ( )を使用
  • 現在の日付を取得するにはdatetime.date . today ( )を使用
  • 時刻を取得するにはtime.time( )を使用
  • timedeltaオブジェクトは2つの日時の時間差や経過時間を表す
  • strftime( )は日付や時間の情報を任意の書式フォーマットの文字列に変換
  • strptime( )は日付や時刻を表す文字列からdatetimeオブジェクトを作成

datetimeを使用すれば簡単に日付や時刻を扱うことができるため、この機会にしっかり理解を深めておくと良いでしょう。

このブログでは他にも様々なPythonの関数について解説しています。ぜひご覧ください!

マスターしよう!Pythonでimportを使う方法について徹底解説!Pythonを学習し始めたばかりの人で「import」につまずいている人もいることでしょう。 そこで今回は import...
Pythonの出力関数printの要点をつかむ!基礎〜応用まで徹底解説Pythonを学習し始めたばかりの方で、print関数についてつまずいてしまう人も少なからずいるでしょう。 「Pythonのp...