地味ですが、Pythonの時間関連の勉強をしたいと思います。
当然いつもやっているのですが、しっかりと頭に叩き込みたいと思います。
下記をやることで頭に叩き込まれると思います。
- 今日を得る
- 明日を得る
- 昨日を得る
- 1時間前を得る
- 29時間後を得る
- 5分前を得る
- 2011年3月11日からの経過日を得る
- あと何年で50歳になるかを得る
- あと年日で50歳になるかを得る
- あと何時間で50歳になるかを得る
- 8日後を得る
- 1ヶ月後を得る
- 3年2ヶ月3日及び11時間後を得る
さて、まずここを見ながら勉強します。
timedeltaオブジェクト
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[,weeks]]]]]]])
timedeltaオブジェクトは経過時間、すなわち二つの日付や時刻間の差を表します。
ということなので、時間の計算をしたいときは、このオブジェクトを使うことになるわけでしょう。
試しに、使ってみましょう。
d = datetime.timedelta(days = -1)
こうやると、dは、-1 day, 0:00:00となっています。
d1 = datetime.timedelta(days = 1) d2 = datetime.timedelta(days = 5) dd = d2 - d1
こうやると、ddは、4 days, 0:00:00となっています。確かに、計算できていますね。dd.total_seconds()を出してみると、345600.0となります。60秒×60分×24時間×4日ですと、まさしく345600ですね。合っていました。
dateオブジェクト
class datetime.date(year, month, day)
dateオブジェクトは日付 (年、月、および日) を表します。
次はdateオブジェクトで、年月日を表すオブジェクトですね。差分を表すのがtimedeltaですが、こちらはまさに日付を表すものになります。シンプルですね。では、実際使ってみます。
badDay = datetime.date(2011, 3, 11)
とやると、badDayは、2011-03-11となりました。
today = datetime.date.today()
とやると、今日の日付が得られます。2013-02-24となりました。
d = datetime.date.fromordinal(1000000)
こんなのもやってみました。1年1月1日を1とするという変な関数ですね。2といれると、1年1月2日ですし、365と入れると、1年12月31日となります。ちなみに、よく百万年とかいいますが、百万日ということで1000000と入れると、2738-11-28が返ってきます。100万年というのは果てしないことであるのだなと思った次第です。
y = today.year
とやりますと、先程作成したtodayの年のみyに入ります。month、dayも同じ仕組みですね。
ほぼほぼ、整いました。
それでは、宿題を順に解いていきましょう。
■ 今日を得る
これは先程やってしまいました。
■明日を得る
tomorrow = today + datetime.timedelta(days = 1)
とやると、2013-02-25 12:50:48.396328出ました。OKです。
■昨日を得る
yesterday = today - datetime.timedelta(days = 1)
とやると、2013-02-23 12:52:21.310513出ました。OKです。
■1時間前を得る
d = today - datetime.timedelta(hours = 1)
とやると、
2013-02-24 11:55:24.600223でました。タイムゾーンが違うんですけどまあいいでしょう。
■ 29時間後を得る
e = today + datetime.timedelta(hours = 29)
とやると、
2013-02-25 17:57:20.966985出ました。oKそうですね。
■5分前を得る
飽きてきました。
f = today - datetime.timedelta(minutes = 5)
2013-02-24 12:54:06.213152出ました。OKです。
■2011年3月11日からの経過日を得る
今日から引けばいいですね。
g = datetime.datetime(2011,3,11) - today
-717 days, 10:57:36.650128そういえば、today = datetime.datetime.today()としてましたので、全部時間がでてるですね。
ちなみに、date型と、datetime型で計算しようとすると怒られました。
■あと何年で50歳になるかを得る
これは今32歳ですので、今日から18年後を取得するってことでいいですかね。
いやーひととおり、色々やってたんですけど、よく考えたら18年ですね。
■1ヶ月前を得る
もう飽きたので眠いのでこれをやって終わりたいと思います。
i = today - datetime.timedelta(days=30)
2013-01-25 13:15:23.474761
終了です。
体得しました。修行のようでした。