Python之time與datetime獲得系統時間
阿新 • • 發佈:2018-10-31
python有兩個模組可以用來獲得系統時間,分別是time與datetime模組。平時經常用到,現查又找不到總結的比較全面的文章,因此做一個總結歸納。
1 time模組
time精度只能到秒,具體使用方法如下
import time # 生成timestamp time.time() # 輸出1970年到現在的時間間隔 # 1539154145.183094 time.localtime(time.time()) # time.struct_time(tm_year=2018, tm_mon=10, tm_mday=10, tm_hour=14, tm_min=49, tm_sec=37, tm_wday=2, tm_yday=283, tm_isdst=0) time.strftime('%Y-%m-%d',time.localtime(time.time())) # '2018-10-10' ''' python中時間日期格式化符號: %y 兩位數的年份表示(00-99) %Y 四位數的年份表示(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 當前時區的名稱 %% %號本身 '''
2 datetime
datatime模組重新封裝了time模組,提供更多介面,提供的類有:date,time,datetime,timedelta,tzinfo。
2.1 date類
#datetime.date(year, month, day)
from datetime import date
birthday = date(year=1993, month=1, day=18)
birthday
#datime.date(1993, 1, 18)
birthday.year
#1993
2.2 time類
#datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ) from datetime import time now_time = time(hours=20, minute=30, second=10) now_time #datetime.time(20, 30, 10) now_time.hours #20
2.3 datetime類
datetime相當於date和time結合起來。
如果要獲得當前系統的時間,只需要print(datetime.now())即可
如果要計算某段程式碼的執行時間,只需要在程式碼前後分別輸出datetime.now(),然後作差即可,舉例如下
#datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ) #在例項化datetime物件時,year, month, day是必填項,hour, minute, second, microsecond(微秒), tzinfo(時區)是可選項。 from datetime import datetime birthday = datetime(year=1993,month=1,day=18) birthday #datetime.datetime(1993, 1, 18, 0, 0) now = datetime.now() now #datetime.datetime(2018, 10, 10, 15, 2, 6, 429924) print(now) #2018-10-10 15:2:6.429924 dt1 = datetime.now() ''' 新增要執行的程式碼 ''' dt2 = datetime.now() print('this code take time of ',dt2-dt1)
2.4 timedelta類
使用timedelta可以很方便的在日期上做天days,小時hour,分鐘,秒,毫秒,微妙的時間計算,如果要計算月份則需要另外的辦法。
#coding:utf-8
from datetime import *
dt = datetime.now()
#日期減一天
dt1 = dt + timedelta(days=-1)#昨天
dt2 = dt - timedelta(days=1)#昨天
dt3 = dt + timedelta(days=1)#明天
delta_obj = dt3-dt
print type(delta_obj),delta_obj#<type 'datetime.timedelta'> 1 day, 0:00:00
print delta_obj.days ,delta_obj.total_seconds()#1 86400.0
2.5 tzinfo時區類
#! /usr/bin/python
# coding=utf-8
from datetime import datetime, tzinfo,timedelta
"""
tzinfo是關於時區資訊的類
tzinfo是一個抽象類,所以不能直接被例項化
"""
class UTC(tzinfo):
"""UTC"""
def __init__(self,offset = 0):
self._offset = offset
def utcoffset(self, dt):
return timedelta(hours=self._offset)
def tzname(self, dt):
return "UTC +%s" % self._offset
def dst(self, dt):
return timedelta(hours=self._offset)
#北京時間
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷時間
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京時間轉成曼谷時間
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))
#計算時間差時也會考慮時區的問題
timespan = beijing - bangkok
print "時差:",timespan
#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 時差: -1 day, 23:00:00