1. 程式人生 > >Python之time與datetime獲得系統時間

Python之time與datetime獲得系統時間

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