Pythonには、カレンダー、時刻、日時など、日付と時刻を操作するための複数の組み込みモジュールが用意されています。前回の記事ですでにタイムモジュールを紹介しましたが、それが提供するインターフェースは基本的にC標準ライブラリtime.hと同じです。時刻モジュールと比較して、日時モジュールのインターフェースはより直感的で呼び出しが簡単です。今日は日時モジュールについて話しましょう。
datetimeモジュールは、datetime.MINYEARとdatetime.MAXYEARの2つの定数を定義します。これらはそれぞれ、datetimeが表すことができる最小年と最大年を表します。その中で、MINYEAR = 1、MAXYEAR = 9999。 (プレイヤーでもこの範囲で十分です~~)
datetimeモジュールは、次のクラスを定義します。
注:これらのタイプのオブジェクトは不変です。
以下では、これらのクラスの使用法について詳しく説明します。
日付クラス
日付クラスは日付を表します。日付は年、月、日で構成されています(地球上の誰もがそれを知っています~~)。日付クラスのコンストラクターは次のとおりです。
class datetime.date(year、month、day):パラメーターの意味については説明しませんが、注意すべき点がいくつかあります。
日付クラスは、操作を容易にするために、一般的に使用されるいくつかのクラスメソッドとクラス属性を定義します。
使用例:
from datetime import*import time
print 'date.max:', date.max
print 'date.min:', date.min
print 'date.today():', date.today()
print 'date.fromtimestamp():', date.fromtimestamp(time.time())
# # - - - - 結果----
# date.max:9999-12-31
# date.min:0001-01-01
# date.today():2010-04-06
# date.fromtimestamp():2010-04-06
日付で提供されるインスタンスメソッドと属性:
使用例:
now =date(2010,04,06)
tomorrow = now.replace(day =07)
print 'now:', now,', tomorrow:', tomorrow
print 'timetuple():', now.timetuple()
print 'weekday():', now.weekday()
print 'isoweekday():', now.isoweekday()
print 'isocalendar():', now.isocalendar()
print 'isoformat():', now.isoformat()
# # - - - - 結果----
# now:2010-04-06, tomorrow:2010-04-07
# timetuple():(2010,4,6,0,0,0,1,96,-1)
# weekday():1
# isoweekday():2
# isocalendar():(2010,14,2)
# isoformat():2010-04-06
また、dateは特定の操作をオーバーロードします。これにより、dateに次の操作を実行できます。
注:日付を操作するときは、日付が表現できる範囲を超えないようにしてください。
使用例:
now = date.today()
tomorrow = now.replace(day =7)
delta = tomorrow - now
print 'now:', now,' tomorrow:', tomorrow
print 'timedelta:', delta
print now + delta
print tomorrow now
# # - - - - 結果----
# now:2010-04-06 tomorrow:2010-04-07
# timedelta:1 day,0:00:00
# 2010-04-07
# True
タイムクラス
時間クラスは、時間、分、秒、およびマイクロ秒で構成される時間を表します。 (私は火星出身ではありません~~)時間クラスのコンストラクターは次のとおりです。
class datetime.time(hour [、minute [、second [、microsecond [、tzinfo]]]]):各パラメーターの意味は説明されていません。ここでは、タイムゾーン情報を表すパラメーターtzinfoに注意してください。各パラメーターの値の範囲に注意してください。時間の範囲は[0、24)、分の範囲は[0、60)、秒の範囲は[0、60)、マイクロ秒の範囲は[0、1000000)です。
時間クラスによって定義されたクラス属性:
時間クラスによって提供されるインスタンスメソッドと属性:
使用例:
from datetime import*
tm =time(23,46,10)
print 'tm:', tm
print 'hour: %d, minute: %d, second: %d, microsecond: %d'/%(tm.hour, tm.minute, tm.second, tm.microsecond)
tm1 = tm.replace(hour =20)
print 'tm1:', tm1
print 'isoformat():', tm.isoformat()
# # - - - - 結果----
# tm:23:46:10
# hour:23, minute:46, second:10, microsecond:0
# tm1:20:46:10
# isoformat():23:46:10
日付と同様に、2つの時間オブジェクトを比較または減算して、時間間隔オブジェクトを返すこともできます。ここでは例を示しません。
日時クラス
日時は、日付と時刻に関するすべての情報を含む、日付と時刻の組み合わせです。そのコンストラクターは次のとおりです。datetime.datetime(年、月、日[、時間[、分[、秒[、マイクロ秒[、tzinfo]]]]])、各パラメーターの意味は日付と時刻のコンストラクターと同じです。同様に、パラメータ値の範囲にも注意してください。
日時クラスによって定義されたクラス属性とメソッド:
使用例:
from datetime import*import time
print 'datetime.max:', datetime.max
print 'datetime.min:', datetime.min
print 'datetime.resolution:', datetime.resolution
print 'today():', datetime.today()
print 'now():', datetime.now()
print 'utcnow():', datetime.utcnow()
print 'fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time())
print 'utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time())
# - - - - 結果----
# datetime.max:9999-12-3123:59:59.999999
# datetime.min:0001-01-0100:00:00
# datetime.resolution:0:00:00.000001
# today():2010-04-0709:48:16.234000
# now():2010-04-0709:48:16.234000
# utcnow():2010-04-0701:48:16.234000 #中国は+8時間、現地時間とは8
# fromtimestamp(tmstmp):2010-04-0709:48:16.234000
# utcfromtimestamp(tmstmp):2010-04-0701:48:16.234000
日時クラスによって提供されるインスタンスメソッドと属性(多くの属性またはメソッドが日時に表示され、ここでは同様の意味を持ちます。ここではメソッド名のみをリストします。具体的な意味は1つずつ紹介されません。上記の日付を参照できます。時間クラスによる説明。):
日付と同様に、2つの日時オブジェクトを比較したり、減算して時間間隔オブジェクトを返したり、日時と間隔を加えて新しい日時オブジェクトを返したりすることもできます。詳細な例はここにはありませんので、ぜひお試しください~~
フォーマット文字列
datetime、date、およびtimeはすべてstrftime()メソッドを提供します。このメソッドは、フォーマット文字列を受け取り、日付と時刻の文字列表現を出力します。次の表はpythonマニュアルから抜粋したもので、いくつかの簡単な翻訳を実行しました(翻訳は少し厄介です~~)。
フォーマット文字の意味
%a週間の省略形。水曜日がWebの場合
%A今週の全文。水曜日などは水曜日です
%b月の省略形。たとえば、4月は4月です
%Bはその月のフルネームです。たとえば、4月は4月です
%c:日付と時刻の文字列表現。 (例:04/07/10 10:43:39)
%d:月の日数(月の日)
%f:マイクロ秒(範囲[0,999999])
%H:時間(24時間クロック、[0、23])
%I:時間(12時間の時計、[0、11])
%j:その年の日数[001,366](その年の日)
%m:月([01,12])
%M:分([00,59])
%p:午前または午後
%S:秒(範囲は[00,61]、なぜ[00、59]ではないのか、pythonマニュアルを参照してください〜_〜)
%U:今年の週の週番号、その年の週)、日曜日は週の最初の日です
%w:今日は今週の日数で、範囲は[0、6]、6は日曜日を意味します
%W:今年の週番号(今年の最初の数週間)、月曜日が週の最初の日
%x:日付文字列(例:04/07/10)
%X:時間文字列(例:10:43:39)
%y:2桁で表される年
%Y:4桁で表される年
%z:UTC時間との間隔(現地時間の場合は、空の文字列を返します)
%Z:タイムゾーン名(現地時間の場合は空の文字列を返します)
%%:%% = %
例:
dt = datetime.now()
print '(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f')
print '(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p')
print '%%a: %s '% dt.strftime('%a')
print '%%A: %s '% dt.strftime('%A')
print '%%b: %s '% dt.strftime('%b')
print '%%B: %s '% dt.strftime('%B')
print '日付時刻%%c: %s '% dt.strftime('%c')
print '日付%%x:%s '% dt.strftime('%x')
print '時間%%X:%s '% dt.strftime('%X')
print '今日は今週の最初です%s日'% dt.strftime('%w')
print '今日は今年の最初です%s日'% dt.strftime('%j')
print '今週は今年の最初です%s週'% dt.strftime('%U')
# # - - - - 結果----
# ( %Y-%m-%d %H:%M:%S %f):2010-04-0710:52:18937000
# ( %Y-%m-%d %H:%M:%S %p):10-04-0710:52:18 AM
# %a: Wed
# %A: Wednesday
# %b: Apr
# %B: April
# 日付時刻%c:04/07/1010:52:18
# 日付%x:04/07/10
# 時間%X:10:52:18
# 今日は週の3日目です
# 今日はその年の097日です
# 今週は今年の第14週です
これまでのところ、python日時処理時間の概要に関するこの記事が紹介されています。関連するpython日時処理時間の内容については、ZaLou.Cnを検索してください。
Recommended Posts