[Python] 日付や時間の扱い方に入門(datetimeモジュール)
こんにちは、@yoheiMuneです。
先日はPythonでJSONを扱う(2系、3系)をブログに書きましたが、本日はdatetimeモジュールを用いた日付/時間処理をブログにまとめておきたいと思います。Python2系、3系のどちらでも利用可能です。
http://docs.python.jp/3.3/library/datetime.html
最後になりますが本ブログでは、フロントエンドのネタやPythonネタを中心に情報を発信しています。気になった方はぜひ、RSSやTwitterをフォローして頂けますと幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
先日はPythonでJSONを扱う(2系、3系)をブログに書きましたが、本日はdatetimeモジュールを用いた日付/時間処理をブログにまとめておきたいと思います。Python2系、3系のどちらでも利用可能です。
目次
datetimeモジュールのドキュメント
datetimeに関する詳しいドキュメントは以下にあります。この記事ではその中でもよく使うものを中心にまとめました。http://docs.python.jp/3.3/library/datetime.html
datetimeモジュールの中身
datetimeモジュールには以下のデータ型が存在します。- datetime.date
- 日付を表現するクラス。年月日を保持することができる。
- datetime.time
- 時間を表現するクラス。時分秒とマイクロ秒を保持することができる。
- datetime.datetime
- 日付と時間をまとめて扱うことができるクラス。
- datetime.timedelta
- 2つの日付や時間の差を表現するためのクラス。
- datetime.tzinfo
- タイムゾーン情報を表現する基底クラス。
- datetime.timezone
- タイムゾーンについて、UTCからの固定オフセットとして実装するクラス。
date
、time
、datetime
、timedelta
について扱いたいと思います。datetime.dateクラス
datetime.date
は日付を表現するクラスで、年月日を保持することができます。以下のように利用します。Python2系3系で共通
### date # 引数に年月日を指定する aDate = datetime.date(2015, 1, 1) # 引数が範囲を超える場合はエラー(勝手に繰り越しなどはしない) datetime.date(2015, 13, 1) # 当日を取得する datetime.date.today() # タイムスタンプから日付を取得する datetime.date.fromtimestamp(1442189545) # 日付の演算 datetime.date.today() + datetime.timedelta(days=1) # 日付の演算2 today = datetime.date.today() yesterday = today + datetime.timedelta(days=-1) datetime.date.today() - yesterday # 日付の演算3 yesterday < today # 値の変更 aDate = datetime.date(2015, 1, 1) aDate.replace(year=2026) aDate.replace(month=2) aDate.replace(day=2) # 曜日を返す(0:月曜日、6:日曜日) aDate.weekday() # 曜日を返す2(1:月曜日、7:日曜日) aDate.isoweekday() # フォーマット文字列1 aDate.isoformat() # フォーマット文字列2 # http://docs.python.jp/3.3/library/datetime.html#strftime-strptime-behavior aDate.strftime("%Y/%m/%d(%A) %H:%M:%S.%f") # datetimeへ変換する datetime.datetime(*(aDate.timetuple()[:6]))Python言語の特徴の一つでもある、名前付き引数のおかげで、かなりわかりやすく実装できるなーという印象です。
datetime.timeクラス
datetime.time
クラスでは、時分秒などの時間を管理することができます。以下のように利用します。Python2系3系で共通
### time # 生成 aTime = datetime.time(1,20,35,432) # 1時20分35秒432マイクロ秒 # 値の取得 aTime.hour aTime.minute aTime.second aTime.microsecond # 値の変更 aTime = aTime.replace(hour=2) aTime = aTime.replace(minute=50) aTime = aTime.replace(second=10) aTime = aTime.replace(microsecond=1000) # 文字列にする aTime.strftime("%H:%M:%S.%f")今までのところ
time
だけを使うことはあまりありませんでしたが、一応使う可能性はありそうだなーということでブログには書いてみました。datetime.datetimeクラス
datetime.datetime
クラスでは、日付と時間の両方を管理することができます。以下のように利用します。Python2系3系で共通
### datetime # 引数に年月日時分秒マイクロ秒を与える aDatetime = datetime.datetime(2015, 10, 12, hour=10, minute=20, second=30, microsecond=40) # 現在日時 datetime.datetime.today() datetime.datetime.now() # タイムスタンプから日時を取得する datetime.datetime.fromtimestamp(1442189545) # dateオブジェクトとtimeオブジェクトを合わせる aDate = datetime.date.today() aTime = datetime.time(12, 30, 59) datetime.datetime.combine(aDate, aTime) # 文字列からdatetimeへ # http://docs.python.jp/3.3/library/datetime.html#strftime-strptime-behavior datetime.datetime.strptime("2015-01-01 12:30:59.296195", "%Y-%m-%d %H:%M:%S.%f") # 値の取得 aDatetime.year aDatetime.month aDatetime.day aDatetime.hour aDatetime.minute aDatetime.second aDatetime.microsecond aDatetime.weekday() aDatetime.isoweekday() # 演算 datetime.datetime.now() + datetime.timedelta(days=1) datetime.datetime.now() - datetime.timedelta(weeks=1) datetime.datetime(2015,1,1) - datetime.datetime(2015,1,2) datetime.datetime(2015,1,1) < datetime.datetime(2015,1,2) # Dateの取得 datetime.datetime.now().date() # Timeの取得 datetime.datetime.now().time() # Timestampの取得 datetime.datetime.now().timestamp() # 文字列にする datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")ここまでの
date
とdatetime
を日付関連ではよく使うので、サラサラと使えるようになりたいものです。datetime.timedeltaクラス
datetime.timedelta
クラスでは、日付や時間の差を扱うことができます。具体的には以下のように使います。Python2系3系で共通
### timedelta # 生成(引数は全てオプション、指定しなければ0) aTimedelta = datetime.timedelta(days=1, seconds=2, microseconds=3, milliseconds=4, minutes=10, hours=15, weeks=20) # 生成(負数も指定可能) datetime.timedelta(days=-1) # 演算 datetime.timedelta(days=10) + datetime.timedelta(days=20) datetime.timedelta(days=10) - datetime.timedelta(days=20) datetime.timedelta(days=10) * 5 datetime.timedelta(days=10) * 0.5 datetime.timedelta(days=10) / 2 # 絶対値を取得する abs(datetime.timedelta(days=-10))
timedelta
はよく利用するクラスなので、こちらもサラサラと書けるようになりたい次第です。最後に
今回はPythonのdatetimeモジュールについてブログを書きました。どのプログラミング言語でも日付処理はありますが、Pythonの日付処理は手軽に色々とできていいなーという感覚です。仕事ではPythonでの集計処理などで日付処理をよく利用しています。ぜひ使いこなせるようになりたい次第です。最後になりますが本ブログでは、フロントエンドのネタやPythonネタを中心に情報を発信しています。気になった方はぜひ、RSSやTwitterをフォローして頂けますと幸いです ^ ^。
最後までご覧頂きましてありがとうございました!