Python 日付と時刻

Python プログラムは多くの方法で日付と時刻を処理でき、日付形式の変換は一般的な機能です。

Python には、日付と時刻をフォーマットするために使用できる time モジュールと calendar モジュールがあります。

時間間隔は秒単位の浮動小数点数です。

各タイムスタンプは、1970年1月1日午前0時(エポック)から経過した時間で表されます。

Python の time モジュールには、一般的な日付形式を変換する多くの関数があります。例えば、time.time() 関数は現在のタイムスタンプを取得するために使われます。次の例を参照してください。

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # timeモジュールを導入 ticks = time.time() print "現在のタイムスタンプ:", ticks

上記の例の出力結果:

当前时间戳为: 1459994552.51

タイムスタンプ単位は日付演算に最適です。ただし、1970年より前の日付はこれで表すことができません。あまりに遠い未来の日付も不可で、UNIX と Windows は2038年までしかサポートしていません。



時間タプルとは?

多くの Python 関数は、1つのタプルにまとめられた9つの数字のグループで時間を処理します。

番号フィールド值
04桁の年2008
1月1 から 12
2日1 から 31
3時0 から 23
4分0 から 59
5秒0 から 61 (60 または 61 はうるう秒)
6週の何日目0 から 6 (0は月曜日)
7年の何日目1 から 366 (ユリウス暦)
8夏時間-1, 0, 1。 -1 は夏時間かどうかを決定するフラグです。

上記は struct_time タプルです。この構造には以下の属性があります。

番号属性值
0tm_year2008
1tm_mon1 から 12
2tm_mday1 から 31
3tm_hour0 から 23
4tm_min0 から 59
5tm_sec0 から 61 (60 または 61 はうるう秒)
6tm_wday0 から 6 (0は月曜日)
7tm_yday1 から 366 (ユリウス暦)
8tm_isdst-1, 0, 1。 -1 は夏時間かどうかを決定するフラグです。


現在時刻を取得する

浮動小数点数を返すタイムスタンプ方式から時間タプルへ変換するには、浮動小数点数を localtime などの関数に渡すだけです。

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.localtime(time.time()) print "ローカル時刻:", localtime

上記の例の出力結果:

本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)


フォーマットされた時刻を取得する

必要に応じてさまざまな形式を選択できますが、読み取り可能な時刻パターンを取得する最も簡単な関数は asctime() です。

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.asctime( time.localtime(time.time()) ) print "ローカル時刻:", localtime

上記の例の出力結果:

本地时间为 : Thu Apr  7 10:05:21 2016

日付をフォーマットする

time モジュールの strftime メソッドを使って日付をフォーマットできます。

time.strftime(format[, t])

例のデモ:

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # 2016-03-20 11:45:39 形式にフォーマット print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # Sat Mar 28 22:24:24 2016 形式にフォーマット print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) # フォーマット文字列をタイムスタンプに変換 a = "Sat Mar 28 22:24:24 2016" print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

上記の例の出力結果:

2016-04-07 10:25:09
Thu Apr 07 10:25:09 2016
1459175064.0

Python における日時フォーマット記号:

  • %y 2桁の年(00-99)
  • %Y 4桁の年(000-9999)
  • %m 月(01-12)
  • %d 日(0-31)
  • %H 24時間制の時(0-23)
  • %I 12時間制の時(01-12)
  • %M 分(00-59)
  • %S 秒(00-59)
  • %a ローカルの短縮曜日名
  • %A ローカルの完全な曜日名
  • %b ローカルの短縮月名
  • %B ローカルの完全な月名
  • %c ローカルの対応する日付と時刻の表現
  • %j 年内の日(001-366)
  • %p ローカルの A.M. または P.M. に相当する記号
  • %U 年の週番号(00-53)。日曜日を週の始まりとする
  • %w 曜日(0-6)。日曜日を週の始まりとする
  • %W 年の週番号(00-53)。月曜日を週の始まりとする
  • %x ローカルの対応する日付表現
  • %X ローカルの対応する時刻表現
  • %Z 現在のタイムゾーン名
  • %% % 記号自体

特定の月のカレンダーを取得する

Calendar モジュールには、年歴や月歴を処理するための幅広いメソッドがあります。例えば、特定の月の月歴を出力します:

例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import calendar cal = calendar.month(2016, 1) print "以下は2016年1月のカレンダーを出力します:" print cal

上記の例の出力結果:

以下输出2016年1月份的日历:
    January 2016
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


Time モジュール

Time モジュールには、時間処理と時間形式の変換のための以下の組み込み関数が含まれています:

番号関数と説明
1time.altzone
グリニッジより西の夏時間地域のオフセット秒数を返します。地域がグリニッジより東の場合は負の値を返します(西ヨーロッパ、英国を含む)。夏時間が有効な地域でのみ使用できます。
2time.asctime([tupletime])
時間タプルを受け取り、"Tue Dec 11 18:07:14 2008"(2008年12月11日 火曜日 18時07分14秒)という読み取り可能な形式の24文字の文字列を返します。
3time.clock( )
浮動小数点数として秒単位で現在の CPU 時間を返します。さまざまなプログラムの所要時間を測定するために使用され、time.time() よりも有用です。
4time.ctime([secs])
動作は asctime(localtime(secs)) と同等で、引数が指定されない場合は asctime() と同等です。
5time.gmtime([secs])
タイムスタンプ(1970年エポック以降の浮動小数点数秒)を受け取り、グリニッジ天文時の時間タプル t を返します。注:t.tm_isdst は常に0です。
6time.localtime([secs])
タイムスタンプ(1970年エポック以降の浮動小数点数秒)を受け取り、ローカル時刻の時間タプル t を返します(t.tm_isdst は、その地域が夏時間かどうかに応じて0または1を取ります)。
7time.mktime(tupletime)
時間タプルを受け取り、タイムスタンプ(1970年エポック以降の浮動小数点数秒)を返します。
8time.sleep(secs)
呼び出しスレッドの実行を遅延させます。secs は秒数です。
9time.strftime(fmt[,tupletime])
時間タプルを受け取り、fmt で指定された形式でローカル時刻を読み取り可能な文字列として返します。
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
fmt の形式に従って時間文字列を時間タプルに解析します。
11time.time( )
現在時刻のタイムスタンプを返します(1970年エポック以降の浮動小数点数秒)。
12time.tzset()
環境変数 TZ に基づいて時間関連の設定を再初期化します。

Time モジュールには、以下の2つの非常に重要な属性が含まれています:

番号属性と説明
1time.timezone
属性 time.timezone は、ローカルタイムゾーン(夏時間が有効でない場合)のグリニッジからのオフセット秒数です(>0、アメリカ大陸では <=0、大部分のヨーロッパ、アジア、アフリカ)。
2time.tzname
属性 time.tzname は、状況に応じて異なる文字列のペアを含みます。それぞれ夏時間ありのローカルタイムゾーン名と、夏時間なしの名前です。


カレンダー(Calendar)モジュール

このモジュールの関数はすべてカレンダー関連です。例えば、特定の月の文字月歴を出力します。

月曜日はデフォルトで週の最初の日、日曜日はデフォルトで最後の日です。設定を変更するには calendar.setfirstweekday() 関数を呼び出す必要があります。モジュールには以下の組み込み関数が含まれています:

番号関数と説明
1calendar.calendar(year,w=2,l=1,c=6)
year年の年歴を複数行の文字列形式で返します。3か月ごとに1行になり、間隔は c です。各日の幅は w 文字です。各行の長さは21*W+18+2*C です。l は1週間あたりの行数です。
2calendar.firstweekday( )
現在の毎週の開始日の設定を返します。デフォルトでは、calendar モジュールを最初に読み込んだときに 0、つまり月曜日を返します。
3calendar.isleap(year)

うるう年の場合は True を返し、それ以外の場合は False です。

>>> import calendar
>>> print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
4calendar.leapdays(y1,y2)
Y1 年と Y2 年の間のうるう年の総数を返します。
5calendar.month(year,month,w=2,l=1)
year年month月のカレンダーを複数行の文字列形式で返します。2行のタイトル、1週間に1行です。各日の幅の間隔はw文字です。各行の長さは7*w+6です。lは各週の行数です。
6calendar.monthcalendar(year,month)
整数の単層ネストリストを返します。各サブリストには1週間を表す整数が格納されます。Year年month月の範囲外の日付はすべて0に設定されます。範囲内の日はその月の第何日かで表され、1から始まります。
7calendar.monthrange(year,month)
2つの整数を返します。1つ目はその月の曜日の日付コード、2つ目はその月の日付コードです。日は0(月曜日)から6(日曜日)まで、月は1から12までです。
8calendar.prcal(year,w=2,l=1,c=6)
相当しますprint calendar.calendar(year,w=2,l=1,c=6)。
9calendar.prmonth(year,month,w=2,l=1)
相当しますprint calendar.month(year,month,w=2,l=1) 。
10calendar.setfirstweekday(weekday)
毎週の開始日コードを設定します。0(月曜日)から6(日曜日)まで。
11calendar.timegm(tupletime)
time.gmtimeの逆です:時間タプル形式を受け取り、その時点のタイムスタンプ(1970年エポックからの浮動小数点数秒)を返します。
12calendar.weekday(year,month,day)
指定された日付の曜日コードを返します。0(月曜日)から6(日曜日)まで。月は1(1月)から12(12月)までです。


その他の関連モジュールと関数

Pythonでは、日付と時刻を処理する他のモジュールには次のものがあります:

その他の拡張機能