概要Pythonで日付・時刻を扱うときは、標準ライブラリにあるdatetimeモジュールを使います。標準ライブラリには他にtime(datetime.timeのことじゃないよ)やcalendarといったモジュールもあるのですが、基本的にはこのdatetimeモジュールを使うことになります。datetimeモジュールでは、主に3つの種類のオブジェクトを扱います。日付と時間を表現するdatetime.datetime日付を表現するdatetime.date時間を表現するdatetime.time日付・時刻を扱うdatetime.datetime以下では、datetime.datetime型のオブジェクトを作成しています。second=30)実際のところ、上のコードはdatetimeモジュールのdatetimeクラスをインスタンス化しているだけです。現在の日付・時刻を表すdatetime.datetimeオブジェクトが欲しいならば以下のように簡単に書けます。datetime.datetime.now()datetime.datetimeオブジェクト...他のdateやtimeもそうですが、日付・時刻の加算・減産であったり、文字列⇔datetime.datetimeの相互変換、タイムゾーンのサポート、等など様々な機能を持っています。公式ドキュメントに、端的な説明がありましたので抜粋します。モジュールでは、日付や時間データを簡単な方法と複雑な方法の両方で操作するためのクラスを提供しています。簡単に紹介していきます。日付を扱うdatetime.date時間が必要ない場合...日付だけで良い場合は、datetime.dateが使えます。datetime.datetimeから、時間に関するものを抜いたオブジェクトです。datetime.date型のオブジェクトを作るには、datetimeと同様にインスタンス化します。day=30)today()で今日の日付を表すオブジェクトが作れます。datetime.date.today()時間を扱うdatetime.time時間だけで良い場合は、datetime.timeが使えます。datetime.datetimeから、日付に関するものを抜いたものと考えましょう。second=0)日付・時刻を文字列に変換するdatetime.datetime等のオブジェクトをprint関数に渡すと、それなりには表示がされます。19:21:56.142769もう少しカッコよく表示させたり、文字列として変換させたい場合も多くあります。timeオブジェクトそれぞれにstrftime()があります。%H:%M:%S')print(now_str)ちゃんと整形されていますね。19:28:44%Yは年、%mは月...のように対応しています。どの文字がどの部分に対応するかの詳細は、公式ドキュメントをご覧ください。Python標準の機能を使うformatといった、標準的な書式操作でも扱うことができます。strftimeになれない方は、こちらの方が使いやすいかもしれません。dayといった属性がありますので、単純にそれを取り出して文字列にしています。なんとなくわかるとおもいますが、datetime.dateにはhour等の属性はありませんし、datetime.timeにはyear等の属性はありません。datetime.datetimeは全て持っています。文字列をdatetimeオブジェクトに変換する上の逆として、文字列からdatetime.datetime等に変換することもできます。これは実際よく使う機能です。20:00:30'という文字列をdatetime.datetimeオブジェクトに変換しています。%H:%M:%S')以下のコードは'2017/12/31'という文字列から変換します。時間を指定しないでdatetime.datetimeオブジェクトに変換した場合は、時間は0:00:00になります。'%Y/%m/%d')strptime()の第二引数は、文字列のどこが年月日、時間に対応しているかを教えるための指定です。元の文字列とズレがある場合はエラーになります。以下のコードは元の文字列の20:00:30の部分が解釈できなくてエラーです。20:00:30以下のコードは、書式の%H:%M:%Sに対応する部分が元の文字列にないのでエラーです。%H:%M:%S'元の文字列と指定した書式にズレがないか、よく確認するようにしましょう。補足として、strptime()はdatetime.datetimeにしかありません。datetime.time型のオブジェクトが欲しい場合は、下で紹介するdatetime型をdate型、time型に変換するをご覧ください。datetime型をdate型、time型に変換するdatetime.datetimeオブジェクトの、date()を呼び出すとdate型に変換されます。'%Y/%m/%d').date()time()を呼び出すとtime型に変換されます。'%Y/%m/%d').time()date型とtime型を合体させてdatetime型にするdateとtimeからdatetimeを作りたい場合は、datetime.datetime.combine()を使います。数日後や数時間前といった、日付・時刻の加算減算も簡単に行えます。以下のコードは、現在日付の3日後のdatetime.datetimeオブジェクトを作成します。日付・時刻の加算減算にはdatetime.timedeltaオブジェクトを使います。このオブジェクトは、日付や時刻の差分を表しているオブジェクトです。この差分をdatetime.datetime等のオブジェクトに足したり引いたりすることでn日後、n日前といったことができます。上のコードならば、3日の差分を現在の日付に足すことで3日後ということですね。delta_3のように-演算子を使っても良いです。microsecondsがあり、好きに指定できます。引数名が複数形なことと、年、月単位の指定はできないことに注意してください。1年は365~366、月は28~31までブレがあるためです。年や月の増減をしたい場合はよく使うイディオム的なものをご覧ください。使うイディオム的なもの私が個人的によく使うイディオム的なものをまとめました。725421)]n月後を求める11月15日から1月後は、一般的に12月15日です。12月25日ならば、1月後は1月25ですし、1月前は11月25です。1月31日から1月後ならば2月31...はないので、2月28又は2月29、そんな月の増減がしたいとします。いった処理がしたい場合は以下のように書けます。10))2018-02-282017-12-312018-11-30datetimeの差を求める2つのdatetime.datetimeを受け取り、その差を○時間○分と返すようなシンプルな処理であれば以下のように書けます。実を言うと、datetime.datetime同士であれば単純に加算・減産できます(戻り値はdatetime.timedelta)。2時間30分Djangoで、何時間ログインしたかを調べるのに使いました。twitter等でよく見かける、n時間前、n日前、といった、現在からの差を表したいとします。約5日前Django等のWebアプリでもこのような処理はよく使います。このブログにも、記事には「〇日前」とか書いていますね。上のようなテンプレートタグ等を作ってもよいのですが、django.contrib.humanizeにあるnaturaltimeフィルタ等を使っても良いでしょう。タイムゾーン関連Pythonで、pytzを使ったタイムゾーンの変換をご覧ください。PostsDjangoで、ログイン・ログアウトの履歴を管理するUserモデルのログイン・ログアウトの履歴を管理するアプリケーションを作ります。DjangoPythonで、pytzを使ったタイムゾーンの変換Pythonでタイムゾーン関連の処理をする場合、サードパーティ製ライブラリのpytzを使います。今回はpytzを使ったタイムゾーン関連処理について説明していきます。pytzDjangoで、タイムゾーンの変換Djangoはタイムゾーン関連の機能も充実しており、簡単に利用することができます。その機能を簡単に説明しています。DjangoPython、pytzの詳細pytzやdatetimeについて今まで何度か紹介してきましたが、今回はもう少しpytzとdatetimeのタイムゾーン関連の詳細に踏み込んでいきます。datetimeComment記事にコメントするまだコメントはありません。幾つかの方法で、ブログの更新を受け取れます。