time モジュールの時間表現には主に 3 つの形式があります:
a. 1970 年 1 月 1 日 00:00:00 から始まる秒単位のオフセットを表すタイムスタンプ
b 、struct_time 時間タプル、合計9つの元素グループからなる。
c. 時間をフォーマットする フォーマットされた構造により、時間が読みやすくなります。カスタム形式と固定形式が含まれます。
よく使用される関数は、time.time()
と time.sleep()
です。 time.time()
和time.sleep()
函数。
import timeprint(time.time())
1499305554.3239055
上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round
函数,可以实现浮点数的四舍五入。如下
# 默认四舍五入到整数位,即不保留小数print(round(time.time()))# 可指定参数保留的小数位数print(round(time.time(), 2))
1499305554 1499305554.49
time.sleep(sec)
可以让当前休眠,参数填入秒(s)。
print('good') time.sleep(5.5)# 5.5秒后才打印这句print('yes')
good yes
其他一些函数的使用
# 返回UTC时间print(time.gmtime())# 返回本地时间,在中国就是UTC+8print(time.localtime())
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0) time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour
不一样(它们相差了刚好+8),其余都一样。
下面的函数可以返回一个格式化的日期时间,看起来更加直观。
print(time.ctime())print(time.asctime())# 由于使用默认参数和上面的结果一样print(time.ctime(time.time()))print(time.asctime(time.localtime()))
Thu Jul 6 09:46:15 2017 Thu Jul 6 09:46:15 2017 Thu Jul 6 09:46:15 2017 Thu Jul 6 09:46:15 2017
ctime()
可以传入一个时间戳,没有指定参数时,默认使用当前时间戳作为参数。即time.time()
gtime()
可以传入一个struct_time,没有指定参数时,默认使用当前时间。即time.localtime()
strptime的第一个参数是字符串形式的日期,第二个参数是自定义的日期转换格式。这两个参数的格式一定要对应。比如time.strptime('2017/7/6', '%Y-%m-%d')
一个用了斜杠,一个用了短横线,就会报错。此函数返回一个struct_time
strftime的第一个参数是想要转化成的日期格式,第二个参数是一个struct_time,此函数将元组形式的struct_time转化成第一个参数指定的格式样子,返回的是转化后的日期字符串形式。
%Y-%m-%d
表示年月日,在datetime模块会详细介绍。
a = time.strptime('2017/7/6', '%Y/%m/%d') b = time.strftime('%Y-%m-%d', time.localtime())print(a)print(b)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1) 2017-07-06
使用时间戳可以方便地计时一段程序地运行时间
start_time = time.time()sum = 0for i in range(10000000):sum += 1end_time = time.time()print(end_time - start_time)
2.185124397277832
可以看到执行循环计算加法一千万次,那段程序花了2秒多。
也可以使用time.clock()
函数
start = time.clock()print(start) # 2.6773594453225194e-06time.sleep(2) end = time.clock()print(end - start) # 差值代表了睡眠2秒的时间。2.000246763295544time.sleep(3)print(time.clock()) # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
4.4622657422041984e-07 2.0026006084745567 5.013243112269714
可以看到clock
第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock
的值的差了。即从第一次调用开始算起,到当前调用clock
所经历的时间。
像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()
还要准确。
datetime模块
用来管理日期和时间,其中有三个子模块。分别是time、date、datetime
,所以想要使用datetime可以使用下面的导入方式。
from datetime import datetime# 返回当前时间now = datetime.now()print(now.year, now.month, now.microsecond)# 可以自定义参数,返回格式化后的时间dt = datetime(2017, 10, 1, 23, 59, 59, 456123)print(dt)
2017 7 719609 2017-10-01 23:59:59.456123
datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond
属性中。
由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()
。当然反过来由datetime得到时间戳也是可以的。
# 时间戳转datetimenow = datetime.fromtimestamp(time.time())print(now) sometime = datetime(2017, 7, 5, 23, 59, 59)# datetime转时间戳print(sometime.timestamp())
2017-07-06 09:46:07.903769 1499270399.0
这些datetime对象可以使用><=
dt1 = datetime(2017, 5, 31) dt2 = datetime(2017, 4, 1)print(dt1 - dt2)print(dt1 > dt2)
60 days, 0:00:00 True
round
関数を使用すると、最後に小数点以下 6 桁があることがわかります。以下のように import datetime delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353) delta1 = datetime.timedelta(days=5, hours=2)print(delta.seconds) # 返回属性hours和seconds的和print(delta.total_seconds()) # 只是以秒来表示这段时间print(delta > delta1)print(delta + delta1)
3659 1818059.234353 True 26 days, 3:00:59.234353
time.sleep(sec)
で現在のスリープを設定し、パラメータとして秒を入力します。 🎜🎜from datetime import datetime a = datetime.strptime('2017/7/6', '%Y/%m/%d') b = datetime.now().strftime('%Y-%m-%d')print(a)print(b)
2017-07-06 00:00:00 2017-07-06
tm_hour< を除いて、中国のタイムゾーンは UTC+8 であることがわかります。 /code> (それらは異なります) (正確に +8)、残りは同じです。 🎜🎜次の関数は、書式設定された日付と時刻を返すことができ、より直感的に見えます。 🎜🎜rrreee🎜rrreee<ul class=" list-paddingleft-2"><li>🎜<code>ctime()
は 🎜timestamp🎜 を渡すことができます。パラメータが指定されていない場合は、現在のタイムスタンプが使用されます。デフォルトではパラメータとして。つまり、time.time()
🎜gtime()
は、パラメーターが指定されていない場合、🎜struct_time🎜 に渡すことができます。デフォルトでは時間が使用されます。つまり、time.localtime()
🎜time.strptime('2017/7/6', '%Y-%m-%d')
の一方にスラッシュが使用され、もう一方にダッシュが使用されている場合、次のようなエラーが発生します。報告。この関数は struct_time を返します🎜%Y-%m-%d
は、年、月、日を表します。これについては、datetime モジュールで詳しく説明します。 🎜🎜rrreee🎜rrreeetime.clock()
関数を使用することもできます🎜🎜rrreee🎜rrreee🎜 初めて呼び出されたとき、クロック
が奇妙であることがわかります🎜プロセスの実行時間 🎜 を返します。後続の呼び出しは、lock
への最初の呼び出しの値とは異なります。つまり、最初の呼び出しから lock
への現在の呼び出しまでの経過時間です。 🎜上記と同様に、テストしたいコード部分の上に start を設定し、最後に end を設定すると、フラグメント コードの実行時間を減算することもでき、time よりも正確になります。 .time()
。 🎜🎜datetime🎜🎜datetime モジュール
は日付と時刻を管理するために使用され、3 つのサブモジュールがあります。それらは time、date、datetime
であるため、datetime を使用したい場合は、次のインポート方法を使用できます。 🎜🎜rrreee🎜rrreee🎜datetime は、年、月、日、時、分、秒、マイクロ秒に対応する 7 つのパラメーターを受け入れます。 datetime の 年、月、日、時、分、秒、マイクロ秒
属性にそれぞれ保存されます。 🎜🎜タイムスタンプは日時型に変換できます。以下のように、現在時刻のタイムスタンプを使用します。事実上、datetime.now()
と同等です。もちろん、日時からタイムスタンプを取得することも可能です。 🎜🎜rrreee🎜rrreee🎜 これらの日時オブジェクトでは、><=
記号を使用して 2 つの日付の順序を比較できます。減算演算を実行して 2 つの瞬間の差を表すこともできます。たとえば、🎜🎜rrreee🎜rrreee🎜timedeltaは期間を意味します🎜🎜これは瞬間ではなく、期間を意味することに注意してください。 🎜🎜りー🎜3659 1818059.234353 True 26 days, 3:00:59.234353
timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds
,但是其属性却只有days、seconds、microseconds
。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值。
time模块也有这两个函数(见上面的例子),使用上比较累类似。
strptime按照指定格式将字符串形式的日期转换成datetime对象并返回。
strftime将一个datetime对象(比如now)根据指定的格式转换成字符串并返回。
from datetime import datetime a = datetime.strptime('2017/7/6', '%Y/%m/%d') b = datetime.now().strftime('%Y-%m-%d')print(a)print(b)
2017-07-06 00:00:00 2017-07-06
关于日期时间的格式,看下表。
格式指令 | 含义 |
---|---|
%Y | 带世纪的四位年份,如2017 |
%y | 后两位年份,如17表示2017 |
%m | 月份,从01到12 |
%B | 完整的月份,如November |
%b | 月份的简写,如Nov |
%d | 一个月中的第几天,如从01到31(如果有的话) |
%j | 一年中的第几天 |
%w | 一周中的第几天 |
%A | 完整的周几,如Monday |
%a | 简写的周几,如Mon |
%H | 24小时制的小时00-23 |
%h | 12小时制的小时01-12 |
%M | 分,00-59 |
%S | 秒,00-59 |
%p | AM或者PM |
以上がPython の時刻モジュールと日時モジュールの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。