Python3 日付と時刻

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

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

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

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

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

実例

#!/usr/bin/python3

import time  # timeモジュールを導入

ticks = time.time()
print (現在のタイムスタンプは:, ticks)

上記の例の出力結果:

当前时间戳为: 1459996086.7115328

タイムスタンプ単位は日付演算に最適です。ただし、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_yday年の何日目、1 から 366
8tm_isdst夏時間かどうか。値: 1(夏時間)、0(夏時間ではない)、-1(不明)、デフォルトは -1


現在時刻を取得する

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

#!/usr/bin/python3

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=28, tm_sec=49, tm_wday=3, tm_yday=98, tm_isdst=0)


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

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

#!/usr/bin/python3

import time

localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

上記の例の出力結果:

本地时间为 : Thu Apr  7 10:29:13 2016

日付のフォーマット

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

time.strftime(format[, t])

実例

#!/usr/bin/python3

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:29:46
Thu Apr 07 10:29:46 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 モジュールには、年カレンダーや月カレンダーを処理するための非常に多くのメソッドがあります。たとえば、ある月の月カレンダーを表示するには:

実例

#!/usr/bin/python3

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
グリニッジより西側の夏時間地域のオフセット秒数を返します。地域がグリニッジより東側にある場合は負の値を返します(西ヨーロッパ、英国を含む)。夏時間が有効な地域でのみ使用できます。

次の例は、altzone() 関数の使用方法を示しています:

>>> import time
>>> print ("time.altzone %d " % time.altzone)
time.altzone -28800 
2time.asctime([tupletime])
時間タプルを受け取り、"Tue Dec 11 18:07:14 2008"(2008年12月11日 火曜日18時07分14秒)という読み取り可能な24文字の文字列を返します。

次の例は、asctime() 関数の使用方法を示しています:

>>> import time
>>> t = time.localtime()
>>> print ("time.asctime(t): %s " % time.asctime(t))
time.asctime(t): Thu Apr  7 10:36:20 2016 
3time.clock()
浮動小数点数で計算された秒数で現在のCPU時間を返します。異なるプログラムの処理時間を測定するために使用され、time.time() よりも有用です。

実例

このメソッドはオペレーティングシステムに依存するため、Python 3.3 以降は推奨されておらず、3.8 で削除されました。代わりに次の2つの関数を使用する必要があります。

time.perf_counter()  # 返回系统运行时间
time.process_time()  # 返回进程运行时间
4time.ctime([secs])
機能は asctime(localtime(secs)) と同じです。引数がない場合は asctime() と同じです。

次の例は、ctime() 関数の使用方法を示しています:

>>> import time
>>> print ("time.ctime() : %s" % time.ctime())
time.ctime() : Thu Apr  7 10:51:58 2016
5time.gmtime([secs])
タイムスタンプ(1970年エポック以降の浮動小数点数秒)を受け取り、グリニッジ天文時での時間タプル t を返します。注: t.tm_isdst は常に0です。

次の例は、gmtime() 関数の使用方法を示しています:

>>> import time
>>> print ("gmtime :", time.gmtime(1455508609.34375))
gmtime : time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
6time.localtime([secs]
タイムスタンプ(1970年エポック以降の浮動小数点数秒)を受け取り、現地時刻での時間タプル t を返します(t.tm_isdst は、その場所と時刻が夏時間かどうかに応じて 0 または 1 を取ります)。

次の例は、localtime() 関数の使用方法を示しています:

>>> import time
>>> print ("localtime(): ", time.localtime(1455508609.34375))
localtime():  time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=11, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
7time.mktime(tupletime)
時間タプルを受け取り、タイムスタンプ(1970年エポック以降の浮動小数点数秒)を返します。
実例
8time.sleep(secs)
呼び出しスレッドの実行を遅延させます。secs は秒数を指します。

次の例は、sleep() 関数の使用方法を示しています:

#!/usr/bin/python3
import time

print ("Start : %s" % time.ctime())
time.sleep( 5 )
print ("End : %s" % time.ctime())
9time.strftime(fmt[,tupletime])
時間タプルを受け取り、fmt で指定された形式で現地時刻を読み取り可能な文字列として返します。

次の例は、strftime() 関数の使用方法を示しています:

>>> import time
>>> print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
2016-04-07 11:18:05
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
fmt の形式に従って時間文字列を時間タプルに解析します。

次の例は、strptime() 関数の使用方法を示しています:

>>> import time
>>> struct_time = time.strptime("30 Nov 00", "%d %b %y")
>>> print ("返回元组: ", struct_time)
返回元组:  time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
11time.time( )
現在時刻のタイムスタンプ(1970年エポック以降の浮動小数点数秒)を返します。

次の例は、time() 関数の使用方法を示しています:

>>> import time
>>> print(time.time())
1459999336.1963577
12time.tzset()
環境変数 TZ に基づいて時間関連の設定を再初期化します。
実例
13 time.perf_counter()
タイマーの正確な時間(システムの稼働時間)を返します。システム全体のスリープ時間を含みます。戻り値の基準点は未定義のため、連続して呼び出した結果の差分のみが有効です。
実例
14 time.process_time()
現在のプロセスが CPU を実行した時間の合計を返します。スリープ時間は含みません。戻り値の基準点は未定義のため、連続して呼び出した結果の差分のみが有効です。
 

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 です。1日の幅の間隔は 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行です。1日の幅の間隔は w 文字です。各行の長さは 7 * w + 6 です。l は1週間あたりの行数です。
6calendar.monthcalendar(year,month)
整数の単層のネストリストを返します。各サブリストは1週間を表す整数を格納します。Year 年 month 月の範囲外の日付はすべて 0 に設定され、範囲内の日はその月の何日目かで表され、1 から始まります。
7calendar.monthrange(year,month)

2つの整数を返します。最初の整数はその月の曜日、2番目の整数はその月の日数です。曜日は 0(月曜日)から 6(日曜日)までです。

>>> import calendar
>>> calendar.monthrange(2014, 11)
(5, 30)

(5, 30) の説明:5 は 2014 年 11 月の最初の日が土曜日であることを示し、30 は 2014 年 11 月が全部で 30 日あることを示します。

8calendar.prcal(year, w=0, l=0, c=6, m=3)
print (calendar.calendar(year, w=0, l=0, c=6, m=3)) と同等です。
9calendar.prmonth(theyear, themonth, w=0, l=0)
と同等です。print(calendar.month(theyear, themonth, w=0, l=0))。
10calendar.setfirstweekday(weekday)
毎週の開始日コードを設定します。0(月曜日)から 6(日曜日)までです。
11calendar.timegm(tupletime)
time.gmtime の逆です:時間タプル形式を受け取り、その時点のタイムスタンプ(1970年1月1日以降の浮動小数点数秒)を返します。
12calendar.weekday(year,month,day)
指定された日付の曜日コードを返します。0(月曜日)から6(日曜日)までです。月は1(1月)から12(12月)までです。


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

Python には、日付と時刻を扱う他のモジュールもあります:

その他の拡張