実務に生かすPythonサンプル

【保存版】Pythonのdatetimeで日付/時間を操作【実務での使用例とハマりどころも解説】

こんにちは。投資エンジニアの三年坊主(@SannenBouzu)です。

今回は、Pythonのdatetimeライブラリで日付や時間を操作したい人の疑問に答えます。

Pythonのdatetimeで日付や時間を操作したい。

文字列と相互に変換したり、日付や時間の差を計算するにはどうするんだろう。実務での使用例やハマりどころについても知りたい。

この記事では、エンジニアの実務・大学の研究・趣味で、合わせて5年以上Pythonを使ってきた経験を生かして、Pythonのdatetimeで日付や時間を操作する方法を紹介します。

この記事はこんな方におすすめ!

  • Pythonのdatetimeを使って日付や時間の操作をしたい方
  • 実務での使用例やハマりどころを知りたい方

 

日付/時間を扱うPython標準ライブラリdatetimeで使う主なデータ型まとめ

参考:8.1. datetime — 基本的な日付型および時間型 — Python 3.6.5 ドキュメント

 

datetimeで使う主なデータ型を、実際の使用例とあわせて紹介します。

datetimeをインポートした前提で読み進めてください。Google Colaboratory上で実行して確認しています。

 

datetime.date:日付

dateオブジェクトは日付(年・月・日)を表します。属性として year, month, dateを持ちます。

 

today()を使って、実行日当日のdateオブジェクトを生成できます。

 

datetime.time:時間

timeオブジェクトは時刻(時・分・秒・マイクロ秒)を表します。属性として hour, minute, second, microsecond を持ちます。

 

引数は省略するとゼロになります。

 

timeオブジェクトでは、now()のようなメソッドを使って現在時刻を取得することはできません。

 

datetime.datetime:日付と時間

datetimeオブジェクトは、dateオブジェクト(年・月・日)とtimeオブジェクト(時・分・秒・マイクロ秒)の情報が入っているオブジェクトです

属性として year, month, day, hour, minute, second, microsecond を持ちます。

年・月・日の引数は必須で、その他の引数は任意です。

 

「マイクロ秒」は1,000,000分の1秒です。「ミリ秒」を飛ばして「マイクロ秒」を使うのは少し不思議な感じがしますが。

  • 1秒=1,000ミリ秒
  • 1ミリ秒=1,000マイクロ秒

 

now()やtoday()を使って、実行日当日の日付と時刻をdatetimeオブジェクトとして取得できます

 

datetime.timedelta:date, datetimeの比較・引き算で得られる時間差

timedeltaオブジェクトは、2つの日付や時刻の時間差・経過時間を表すオブジェクトです

属性として days, seconds, microseconds が保持されます。

 

dateやdatetimeオブジェクトに対してtimedeltaオブジェクトの足し算・引き算など四則演算も可能です

 

datetime.tzinfo, datetime.timezone:タイムゾーン

2つ以上のタイムゾーンをまたぐ国や地域で日付や時間の比較をするには、タイムゾーンを意識する必要があります。

timezone クラスは tzinfo のサブクラスで、各インスタンスは UTC からの固定されたオフセットで定義されたタイムゾーンを表しています。

 

datetimeオブジェクトで実行日当日の日付と時刻を取得するnow()の例では、タイムゾーンを指定していなかったので、実行したマシンの時刻(UTCで朝5時台)が返ってきました

下のように日本のタイムゾーンを指定して実行すると、日本のタイムゾーンの情報を含んだdatetimeが返ってきます

 

Pythonのdatetimeライブラリ:実務での使用例・ハマりどころ

①:strftime()とstrptime()が紛らわしい。strftime()は日付→文字列にフォーマット、strptime()は逆

strftime()は日付・時間→文字列に変換、逆にstrptime()は文字列→日付・時間に変換するメソッドです。

fとp、一文字しか違わず紛らわしいですが、覚え方としてはこのように考えるのがおすすめです。

  • fはフォーマットのf。日付・時間を文字列に変換するためのフォーマット(書式)を指定してあげて、時刻を表現する文字列を生成する。
  • pはパースのp。文字列をパースして日付・時間に変換する。

parse, pointerなど諸説あるようですが、実用上はstrftime()をきちんと覚えて、strptime()がその逆と分かれば問題ない場合が多いです。

What does the “p” in strptime stand for?

 

②:strftime()のフォーマットとstr.format()に比べた利点

文字列のstr.format()を使って値を変数を代入していくよりも、strftime()を使った方が効率よく文字列を生成できますし、フォーマットのミスをする可能性も低いです。

私も、strftime()になじみがない頃コードレビューで指摘されて気がつきました。

 

実行速度を簡単に検証してみました。

 

③:ISOフォーマットで出力形式を統一

日付と時刻の表記方法については、ISO 8601という国際規格があり、この国際規格に合わせておくと、APIなどでデータを利用する際もシンプルで分かりやすいのがメリットです。

ISO 8601に準拠した形で時刻を表す文字列を出力してくれるのが、isoformat()というメソッドです

日付と時間を分ける文字(セパレータ)を指定できます(デフォルトは’T’)。

 

業務で「データベースの値を抽出してCSV形式で日次レポートを出力してほしい」と依頼されたことがあったのですが、その際に時刻のフォーマットとしてISOフォーマットが指定されていました。

当時はisoformat()を知らなかったのですが、少し時間を割いて公式ドキュメントを読んでみると、自分のやりたいことを実現してくれる便利な機能がすでに用意されていることもありますね。

 

Pythonのdatetimeで日付と時間を自由自在に操作して、快適なエンジニア生活を送りましょう。

Pythonでcsvファイルの読み込み【csvモジュール】Pythonでcsvファイルを読み込みたいですか?標準のcsvモジュールを使って、Pythonでcsvファイルを読み込む方法を紹介します。ライブラリをインストールせずに気軽に使えるので、記事で詳細を確認して、手元のファイルで試してみてください。...
Python3でMySQL Connectorのインストール・接続方法【快適に使う方法を紹介】Python3でMySQL Connectorをインストールして使うために、基本的な使い方とエラー処理について説明しています。変なエラーになるべく苦しまずに快適に使うための知識を紹介します。Python3でMySQLを操作したい方は是非記事をご覧ください。...

より本格的にPythonを学ぶなら

より本格的にPythonを学びたい場合には、プログラミングスクールを活用するのがオススメです。

プログラミングスクールって、「プログラミングって何?」みたいな超初心者だけのものと思っていませんか?

最近では、経験者向けにも、レベルや希望に合わせた様々なコースが展開されています。

オススメなのが、Aidemyです。

特徴は、人工知能特化型のプログラミング学習サービスということ。

Pythonを学べるコース

  • AIアプリ開発コース(画像認識)
  • データ分析コース(数値予測)
  • 自然言語処理コース
  • E資格対策コース
  • クラウドAI開発コース
  • 実戦データサイエンスコース

Aidemyの教材は「理論よりもまずは実践」をうたっていて、他社と比較すると、かなり本格的に、現場でも実際に使われるスキルを身につけられます。

そして、どのコースも同じ料金で受け放題

余裕があれば、AIアプリ開発コースの内容と、クラウドAI開発コースの内容を組み合わせて学習することもできてしまいます。

無料のカウンセリングで、不明点や学習したい内容をまずは相談してみましょう。

» Aidemyの無料カウンセリングはこちら

 

もう一つオススメなのが、TechAcademyです。

オンラインプログラミングスクール受講者数No.1の実績に加えて、受講生限定の転職サポートもあり、TechAcademyで学んだスキルを生かせる職場への転職も可能です。

「セット割」を活用すると、Pythonを使った人工知能・データ分析のスキルを過不足なく身につけられます。

1週間の無料体験があるので、システムの使い心地やサポート体制をのぞいてみるのがいいかなと思います。

» TechAcademyの無料体験はこちら

 

どちらのスクールも質問サポートが充実していて、早ければその場で、遅くとも次の日には疑問が解消するので、

「独学でプログラミングを勉強してきたけど、行き詰まるたびに時間が奪われるし、周りに気軽に聞ける人もいない」

みたいな無駄な一日を過ごすことがなくなります。

 

以上、Pythonを本格的に学べるプログラミングスクールを2校紹介しました。どちらも最初に20〜30万円くらいの投資が必要ですが、実際にスキルを身につけてしまえば、あとで簡単に回収できるはずです。例えば、

  • Pythonエンジニアに転職して年収を上げる:50万円
  • 副業で業務委託:20万円(時給5,000円で週10時間、1か月)
  • クラウドソーシングの単発案件:5〜10万円

このように、プログラミングスクールにお金を払ってもすぐに回収できることが分かると思います。

実際に、Pythonを使う業務委託で時給5,000円というのは普通にあるので、スキルをつけたら「週末にちょっと作業」を1〜2か月続けるだけですよね。

Google検索で問題解決するのもいいですが、「毎回ちょっと場当たり的に対応していて苦しいな・・・」と感じているあなたは、一度腰を据えてPythonを本格的に学ぶことを選択肢に入れてみてはいかがでしょうか。

記事で紹介したプログラミングスクールの一覧

  • Aidemy→人工知能特化、無料カウンセリングあり
  • TechAcademy→受講者数No.1、1週間の無料体験あり

RELATED POST

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください