日期和時間
一 time模塊
import time
時間的表示形式:
時間戳 時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。
以整型或浮點型表示時間的一個以秒為單位的時間間隔。這個時間間隔的基礎值是從1970年1月1日開始算起
(一) 格式化日期的函數
time.time() | 當前時間戳(秒數) UNIX和Windows只支持到2038年。 |
---|---|
time.localtime() | 接收時間輟(1970紀元后經過的浮點秒數)並返回當地時間下的時間元組 (0是周一) |
time.strftime("%Y-%m-%d %H:%M:%S"[,time.localtime()]) | 格式化成2016-03-20 11:45:39形式 第二個參數可有可無 |
time.asctime() | 返回格式化后的英文文本的時間 |
time.mktime(tupletime) | 接受時間元組並返回時間輟 |
time.sleep(secs) | 推遲調用線程的運行,secs指秒數。 |
time.clock() | 用以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程序的耗時,比time.time()更有用。 |
time.strptime(“2013-10-10 23:40:00”, "%Y-%m-%d %H:%M:%S") | 將其轉換為時間元組 |
mktime的例子
import time t = (2016, 2, 17, 17, 3, 38, 1, 48, 0) secs = time.mktime( t ) print ("time.mktime(t) : %f" % secs)#time.mktime(t) : 1455699818.000000 time.strptime(“2013-10-10 23:40:00”, "%Y-%m-%d %H:%M:%S") time = time.mktime(time.strptime("2013-10-10 23:40:00", "%Y-%m-%d %H:%M:%S")) print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time)))
計算程序運行的時間
import time def procedure(): for i in range(10000): pass # time.clock t0 = time.clock() procedure() print (time.clock() - t0) # time.time t0 = time.time() procedure() print (time.time() - t0)
(二) python中時間日期格式化符號
%Y | 4位的年 | %y | 2位的年 |
---|---|---|---|
%m | 月份(01-12) | %d | 月內中的一天(0-31) |
%H | 24小時制小時數(0-23) | %I | 12小時制小時數(01-12) |
%M | 分鍾數(00=59) | %S | 秒(00-59) |
%a | 本地簡化星期名稱 英文文本 簡化 | %A | c本地簡化星期名稱 英文文本 完整 |
%j | 年內的一天(001-366) | %w | 星期(0-6),星期天為星期的開始 (0是周一) |
%x | 本地相應的日期表示 (08/02/17) | %X | 本地相應的時間表示 23:48:34 |
例子:計算一個人活了多久
二、日歷(Calendar)模塊
calendar.isleap(year)
是閏年返回 True,否則為 false。
import calendar print(calendar.isleap(2000)) True print(calendar.isleap(1900)) False
calendar.leapdays(y1,y2)
返回在Y1,Y2兩年之間的閏年總數。
calendar.month(year,month,w=2,l=1)
返回一個多行字符串格式的year年month月日歷,兩行標題,一周一行。每日寬度間隔為w字符。每行的長度為7* w+6。l是每星期的行數。
獲取某月日歷
import calendar cal = calendar.month(2016, 1) print ("以下輸出2016年1月份的日歷:") print (cal) 例子:Python 生成日歷 # 引入日歷模塊 import calendar # 輸入指定年月 yy = int(input("輸入年份: ")) mm = int(input("輸入月份: ")) # 顯示日歷 print(calendar.month(yy,mm))
三 datetime模塊
import datetime
datetime比time高級了不少,可以理解為datetime基於time進行了封裝,提供了各位使用的函數,datetime模塊的接口更直觀,更容易調用
from datetime import datetime 本地時間 datetime.now() #2017-08-03 00:13:00.690975 utc時間 datetime.utcnow() #獲取指定時間 d2 = datetime.datetime(1999, 10, 1, 10, 28, 25, 123456) #年月日 時分秒 微妙數 1999-10-01 10:28:25.000001 #沒有微妙數 省略 d2 = datetime.datetime(1999, 10, 1, 10, 28, 25) #1999-10-01 10:28:25
datetime 轉換成時間戳
把一個datetime
類型轉換為timestamp['taɪmstæmp]只需要簡單調用timestamp()
方法:
>>> from datetime import datetime >>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期時間創建datetime >>> dt.timestamp() # 把datetime轉換為timestamp datetime.now().timestamp() 1429417200.0
注意Python的timestamp是一個浮點數。如果有小數位,小數位表示毫秒數。
timestamp轉換為datetime
要把timestamp轉換為datetime
,使用datetime
提供的fromtimestamp()
方法:
>>> from datetime import datetime >>> t = 1429417200.0 >>> print(datetime.fromtimestamp(t)) 2015-04-19 12:20:00
注意到timestamp是一個浮點數,它沒有時區的概念,而datetime是有時區的。上述轉換是在timestamp和本地時間做轉換。
timestamp也可以直接被轉換到UTC標准時區的時間:
>>> from datetime import datetime >>> t = 1429417200.0 >>> print(datetime.fromtimestamp(t)) # 本地時間 2015-04-19 12:20:00 >>> print(datetime.utcfromtimestamp(t)) # UTC時間 2015-04-19 04:20:00
str轉換為datetime
很多時候,用戶輸入的日期和時間是字符串,要處理日期和時間,首先必須把str轉換為datetime。轉換方法是通過datetime.strptime()
實現,需要一個日期和時間的格式化字符串:
>>> from datetime import datetime >>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S') >>> print(cday) 2015-06-01 18:19:59
字符串'%Y-%m-%d %H:%M:%S'
規定了日期和時間部分的格式。詳細的說明請參考Python文檔。
注意轉換后的datetime是沒有時區信息的。
datetime轉換為str
如果已經有了datetime對象,要把它格式化為字符串顯示給用戶,就需要轉換為str,轉換方法是通過strftime()
實現的,同樣需要一個日期和時間的格式化字符串:
>>> from datetime import datetime >>> now = datetime.now() >>> print(now.strftime('%a, %b %d %H:%M')) Mon, May 05 16:28
Python 獲取昨天日期
# 引入 datetime 模塊 import datetime def getYesterday(): today=datetime.date.today() oneday=datetime.timedelta(days=1) yesterday=today-oneday return yesterday # 輸出 print(getYesterday())
四.時間加減問題
當前日期時間
import datetime
print datetime.datetime.now()
# 2018-05-08 16:53:30.101000
格式化時間
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
# 2018-05-08 16:54
多加一天
import datetime
print (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
# 2018-05-09 16:56:07
減一天
import datetime
print (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S")
# 2018-05-07 16:56:59
可以把days改為hours minutes,就可以提前XX小時/分鍾了。