9.python內置模塊之time模塊

来源:https://www.cnblogs.com/bonheur/archive/2020/03/01/12337375.html
-Advertisement-
Play Games

Python 程式能用很多方式處理日期和時間,轉換日期格式是一個常見的功能。Python 提供了 time ,datatime, calendar 等模塊可以用於格式化日期和時間。時間間隔是以秒為單位的浮點小數。每個時間戳都以自從 1970 年 1 月 1 日午夜(歷元)經過了多長時間來表示。Pyt ...


Python 程式能用很多方式處理日期和時間,轉換日期格式是一個常見的功能。Python 提供了 time ,datatime, calendar 等模塊可以用於格式化日期和時間。時間間隔是以秒為單位的浮點小數。每個時間戳都以自從 1970 年 1 月 1 日午夜(歷元)經過了多長時間來表示。Python 的 time 模塊下有很多函數可以轉換常見日期格式。如函數 time.time() 用於獲取當前時間戳。時間戳單位最適於做日期運算。但是1970年之前的日期就無法以此表示了。太遙遠的日期也不行,UNIX和Windows只支持到2038年。

Unix時間戳(timestamp):返回得到一個數值類型的數據(python表現浮點值),記錄了時間原點(1970年00點00分00秒)至今的秒值

UTC時間:世界協調時間

GMT時間:格林尼治/格林威治時間

CCT時間:北京時間(當前時間),屬於東八區      【註意】比UTC時間 + 8小時

1.time模塊常用的函數:

1). time.time():返回時間戳對象,數據類型浮點值

2). time.localtime([ts]):將時間戳數據轉換為一個本地元祖對象返回 ,數據類型:time.struct_time類型,返回time.struct_time類型的對象,內部封裝維護著9個元素

3).  time.gmtime([ts]):將時間戳數據轉換為utc時間元祖對象返回    數據類型:time.struct_time類型

4). time.mktime(tp):將本地元祖對象轉換為時間戳對象(逆過程)

5). time.ctime([ts]):將時間戳對象轉換為字元串數據

6). time.asctime([tp]):將本地元祖對象轉化為字元串數據

7). time.strftime(format,tp):將本地元祖對象以format格式化為str類型的數據返回

8). time.strptime(string,format):將字元串數據以format格式化為本地元祖對象返回

9). time.sleep(secs):推遲調用線程的運行,secs指秒數

10). time.clock():用以浮點數計算的秒數返回當前的CPU時間。用來衡量不同程式的耗時,比time.time()更有用。由於該方法依賴操作系統,在 Python 3.3 以後不被推薦,而在 3.8 版本中被移除,需使用下列兩個函數替代。time.perf_counter() :返回系統運行時間;time.process_time() : 返回進程運行時間。

 

 代碼演示示例:

 1 import time
 2 
 3 print(time.time())          # 得到1547637538.7860892 
 4  
 5 print(time.localtime())     # 得到time.struct_time(tm_year=2019,tm_mon=1,
 6 tm_mday=16,tm_hour=19,tm_min=8,tm_sec=10,tm_wday=2,tm_yday=16,tm_isdst=0)
 7  
 8 print(time.gmtime())        # 得到time.struct_time(tm_year=2019, tm_mon=1, tm_mday=16, tm_hour=11, tm_min=24, tm_sec=9, tm_wday=2, tm_yday=16, tm_isdst=0) 
 9 
10 # mktime(tp)函數被調用執行,必須要傳入一個實際參數,參數類型為time.struct_time類型對象,返回值不會保留小數點後7位,只有一個(預設為0)
11 tp = (2019,1,5,16,35,45,5,5,0)
12 print(time.mktime(tp))      # 得到 1546677345.0
13 
14 print(time.ctime())         # 得到 Wed Jan 16 19:43:35 2019 
15 
16 print(time.asctime())       # 得到 Sat Jan  5 16:35:45 2019
17 
18 tp = (2019,1,5,16,35,45,5,5,0)
19 print(time.strftime('%Y-%m-%d %H:%M:%S',tp)           # 得到 2019-01-05 16:35:45 
20 print(time.strftime('%Y/%m/%d %H:%M:%S',tp)           # 得到 2019/01/05 16:35:45 
21 print(time.strftime('%y/%m/%d %H:%M:%S',tp)           # 得到 19/01/05 16:35:45
22 print(time.strftime('%y/%h/%d %H:%M:%S',tp)           # 得到 19/Jan/05 16:35:45 
23 print(time.strftime('%D %X',tp)                       # 得到 01/05/19 16:35:45 
24 print(time.strftime('%Y"年"%h"月"%d"日" %H:%M:%S',tp)) # 報錯 UnicodeEncodeError,因為格式內容存在中文(非法字元)
25 
26 str3 = 2019-01-05 16:35:45
27 print(time.strptime(str3,'%Y-%m-%d %H:%M:%S'))        # 得到 time.struct_time(tm_year=2019, tm_mon=1, tm_mday=5, tm_hour=16, tm_min=35, tm_sec=45, tm_wday=5, tm_yday=5, tm_isdst=-1) 
29 print(time.strptime(str3,'%Y/%m/%d %H:%M:%S'))        # 報錯 ValueError,解析字元串數據時的(format)必須和字元串格式化時的format保持一致,否則報錯...
30 
31 time.sleep(2)

格式化日期以自定義樣式顯示輸出:

1 # 元祖格式化成2016-03-20 11:45:39形式
2 print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))  #2016-04-07 10:29:46
3 
4 # 元祖格式化成Sat Mar 28 22:24:24 2016形式
5 print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))  #Thu Apr 07 10:29:46 2016
6   
7 # 格式字元串轉換為時間戳
8 a = "Sat Mar 28 22:24:24 2016"
9 print (time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))  #1459175064.0


時間元組,很多Python函數用一個元組裝起來的9組數字處理時間,即struct_time元組

 1 '''
 2  序號      欄位             值
 3  0        4位數年           2008
 4  1        月               1 到 12
 5  2        日               1到31
 6  3        小時             0到23
 7  4        分鐘             0到59
 8  5        秒              0到61 (60或61 是閏秒)
 9  6    一周的第幾日         0到6 (0是周一)
10  7    一年的第幾日         1到366 (儒略歷)
11  8       夏令時            -1, 0, 1, -1是決定是否為夏令時的旗幟   
12 ''' 

 

struct_time元組,這種結構具有如下屬性

 1 '''
 2 序號    屬性      值
 3 0    tm_year    2008
 4 1    tm_mon     1 到 12
 5 2    tm_mday    1 到 31
 6 3    tm_hour    0 到 23
 7 4    tm_min     0 到 59
 8 5    tm_sec     0 到 61 (60或61 是閏秒)
 9 6    tm_wday    0到6 (0是周一)
10 7    tm_yday    一年中的第幾天,1 到 366
11 8    tm_isdst   是否為夏令時,值有:1(夏令時)、0(不是夏令時)、-1(未知),預設 -1
12 '''

 

python中時間日期格式化符號

 1 '''
 2 %y 兩位數的年份表示(00-99)
 3 %Y 四位數的年份表示(000-9999)
 4 %m 月份(01-12)
 5 %d 月內中的一天(0-31)
 6 %H 24小時制小時數(0-23)
 7 %I 12小時制小時數(01-12)
 8 %M 分鐘數(00=59)
 9 %S 秒(00-59)
10 %a 本地簡化星期名稱
11 %A 本地完整星期名稱
12 %b 本地簡化的月份名稱
13 %B 本地完整的月份名稱
14 %c 本地相應的日期表示和時間表示
15 %j 年內的一天(001-366)
16 %p 本地A.M.或P.M.的等價符
17 %U 一年中的星期數(00-53)星期天為星期的開始
18 %w 星期(0-6),星期天為星期的開始
19 %W 一年中的星期數(00-53)星期一為星期的開始
20 %x 本地相應的日期表示
21 %X 本地相應的時間表示
22 %Z 當前時區的名稱
23 %% %號本身
24 '''

2.datetime模塊常用函數:

理解datetime模塊是time模塊的補充/擴展,datetime模塊中有一些常用類:1).datetime類:記錄了日期和時間數據;2).date類:記錄了日期數據;3).time類:記錄了時間數據。

datetime類:

1). datetime.datetime.now() :獲取當前的日期時間對象(返回值是一個datetime類型的數據)

2). datetime.datetime.today():獲取當前的日期時間對象(返回值是一個datetime類型的數據)

3). datetime.datetime.utcnow():獲取當前的日期時間對象(utc時間,數據類型為datetime)

4). datatime.datetime(year,month,day,[hour,minute,seconds,num]):獲取指定的日期和時間對象(類型:datetime)(就是獲取某一個自己想要的時間點)

【假設】dt = datetime.datetime(2018,12,12,11,11,11,345678)

5). dt.strftime(format):將datetime類型的數據轉換為指定格式的字元串數據

6). dt.date():從日期時間對象中分離出日期對象和時間對象,得到date類型對象

7). dt.time():從日期時間對象中分離出日期對象和時間對象,得到time類型對象

8). dt.timestamp():從日期時間對象中得到對應的時間戳對象(日期時間 -> 時間戳對象)

9). dt.timetuple():從日期時間對象中得到對應的時間元祖(日期時間 -> 時間元祖)

10). datetime.date.fromtimestamp(ts):將時間戳對象轉換為日期對象

11). datetime.timedelta():得到一個timedelta類型的對象,可以和datetime對象做運算(+和-)

【補充】:

操作屬性:嘗試獲取日期時間對象中的年、月、日、時、分、秒、小數點後的數據;此操作不是針對函數層面,而是屬性層面的操作。dt.year;dt.month;dt.day;dt.hour;dt.minute;dt.second;dt.microsecond。

 1 import datetime
1
dt = datetime.datetime.now() 2 print(dt,type(dt)) # 2019-01-16 19:52:44.402614 <class 'datetime.datetime'> 3 4 dt1 = datetime.datetime.today() 5 print(dt1,type(dt1)) # 2019-01-16 19:52:44.402615 <class 'datetime.datetime'> 6 7 dt2 = datetime.datetime.utcnow() 8 print(dt2,type(dt2)) # 2019-01-16 11:52:44.402614 <class 'datetime.datetime'> 9 10 11 dt3 = datetime.datetime(2018,12,12,11,11,11,345678) 12 print(dt3,type(dt3)) # 2018-12-12 11:11:11.345678 <class 'datetime.datetime'> 13 14 str1 = dt3.strftime('%Y-%m-%d %X') 15 print(str1,type(str1)) # 2018-12-12 11:11:11 <class 'str'> 16 17 # 從日期時間對象中分離出日期對象和時間對象 18 print(dt3.date(),type(dt3.date())) # 2018-12-12 <class 'datetime.date'> 19 print(dt3.time(),type(dt3.time())) # 11:11:11.345678 <class 'datetime.time'> 20 21 22 ts = dt3.timestamp() 23 print(ts,type(ts)) # 1544584271.345678 <class 'float'> 24 25 tp = dt3.timetuple() 26 print(tp,type(tp)) # time.struct_time(tm_year=2018,tm_mon=12,tm_mday=12, tm_hour=11, tm_min=11, tm_sec=11,tm_wday=2, tm_yday=346, tm_isdst=-1) <class 'time.struct_time'> 27 28 29 ts=1544584271.345678 30 d = datetime.date.fromtimestamp(ts) 31 print(d,type(d)) # 2018-12-12 <class 'datetime.date'> 32 33 34 delta = datetime.timedelta(days=1,hours=1,minutes=1,seconds=1) 35 print(delta,type(delta)) # 1day,1:01:01<class'datetime.timedelta'> 36 # 計算時間差 37 obj = dt3 - delta 38 print(obj,type(obj)) # 2018-12-11 10:10:10.345678 <class 'datetime.datetime'> 39 print(dt3 + delta) # 2018-12-13 12:12:12.345678 40 41 42 # 操作屬性:嘗試獲取日期時間對象中的年、月、日、時、分、秒、小數點後的數據 43 print(dt3.year,dt3.month,dt3.day) # 2018 12 12 44 print(dt3.hour,dt3.minute,dt3.second,dt3.microsecond) # 11 11 11 345678 45
 

3.calendar模塊常用函數:

1). calendar.calendar(year[,w=2,l=1,c=6]):返回一個多行字元串格式的year年年曆,3個月一行,間隔距離為c。 每日寬度間隔為w字元。每行長度為21* W+18+2* C。l是每星期行數。【print(calendar.calendar(year[,w=2,l=1,c=6])) == calendar.prcal(year,w=2,l=1,c=6)】

2). calendar.month(year,month,w=2,l=1):返回一個多行字元串格式的year年month月日曆,兩行標題,一周一行。每日寬度間隔為w字元。每行的長度為7* w+6。l 是每星期的行數。【print(calendar.month(year,month,w=2,l=1)) == calendar.prmonth(year,month,w=2,l=1)】

3). calendar.monthcalendar(year,month):返回一個整數的單層嵌套列表。每個子列表裝載代表一個星期的整數。Year年month月外的日期都設為0;範圍內的日子都由該月第幾日表示,從1開始。

4). calendar.monthrange(year,month):返回兩個整數。第一個是該月的星期幾,第二個是該月有幾天。星期幾是從0(星期一)到 6(星期日)。

5). calendar.firstweekday( ):返回當前每周起始日期的設置。預設情況下,首次載入caendar模塊時返回0,即星期一。

6). calendar.setfirstweekday(weekday):設置每周的起始日期碼。0(星期一)到6(星期日)。

7). calendar.weekday(year,month,day):返回給定日期的星期碼。0(星期一)到6(星期日)。月份為 1(一月) 到 12(12月)。

8). calendar.timegm(tupletime):和time.gmtime相反:接受一個時間元組形式,返回該時刻的時間戳(1970紀元後經過的浮點秒數)。

9). calendar.isleap(year):判斷year是否是閏年。是閏年返回 True,否則為 false。

10). calendar.leapdays(y1,y2):返回在Y1,Y2兩年之間的閏年總數。

 1 import calendar
 2 
 3 print(calendar.calendar(2018,w=2,l=1,c=6))   # 顯示2018年年曆
 4 
 5 print(calendar.month(2018,1,w=2,l=1,c=6)     # 顯示2018年1月月曆
 6 
 7 print(calendar.monthcalendar(2018,1)         # 顯示2018年1月日期[[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, 0, 0, 0, 0]]
 8 
 9 print(calendar.monthrange(2019,1))           # (1, 31) 表示2019年一月的星期二,這個月一共有31天
10 print(calendar.monthrange(2019,2))           # (4, 28)
11 
12 print(calendar.firstweekday())               # 0 表示每周的起始期為星期一
13 print(calendar.setfirstweekdy(1)             # 1 設置每周的起始期設置為星期二
14 print(calendar.weekday(2019,1,1)             # 1 表示2019年1月1日是星期二,0(星期一)到6(星期日)
15 
16 ts = calendar.timegm((2019,1,16,16,13,43))
17 print(ts,type(ts))                           # 1547655223 <class 'int'>
18  
19 print(calendar.isleap(2004))                 # True
20 print(calendar.leapdays(2000,2020))          # 5

 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 兩欄佈局是寫頁面時經常用到的,要想實現兩欄佈局,就需要明白BFC規則,Block formatting context,直譯為“塊級格式化上下文”,可以簡單的理解它為一個獨立的區域,把區域內部元素與外部元素區分開,兩者互不幹擾。它的規則:1.內部元素會在垂直方向一個接一個放置。2.屬於同一個BFC的 ...
  • 記錄怎麼使用text-align與vertical-align屬性設置元素在容器中垂直居中對齊。text-align與vertical-align雖然都是設置元素內部對齊方式的,但兩者的用法還是有略微不同的。在討論這兩者的用法之前,我們首先需要瞭解元素的分類。 塊元素:獨占一行、可設寬高、標準盒模型 ...
  • 圖解Java設計模式之單例設計模式 設計模式介紹 設計模式類型 單例設計模式介紹 餓漢式(靜態常量) 餓漢式(靜態代碼塊) 懶漢式(線程不安全) 懶漢式(線程安全,同步方法) 懶漢式(線程安全,同步代碼塊) 雙重檢查 靜態內部類 枚舉 單例模式註意事項和細節說明 設計模式介紹 1)設計模式是程式員在 ...
  • @RestController RestController是@Controller和@ResponseBody的合併 @EnableAutoConfigurationSpringBoot建議只有一個帶有該註解的類SpringBoot會自動根據jar包的依賴來自動配置項目當項目下麵有HSQLDB的依 ...
  • 前言 去年供職於一家電商公司,被分配到做商城營銷體系的開發設計。本文章記錄了我這個小菜鳥在營銷設計中遇到的坑坑窪窪,以及在重構中的思路。 線性思維,線性設計 首先我們列一列營銷組件有哪些 。 滿減 折扣 秒殺 組合購 換購 優惠券 新人有禮 邀請有禮 簽到 紅包裂變 ... 其次是要知道營銷在 正向 ...
  • 一、Map常用方法簡介 package com.bjpowernode.java_learning; ​ import java.util.HashMap; import java.util.*; ​ public class D91_1_MapCommonMethod { public stati ...
  • 模型評價是指對於已經建立的一個或多個模型,根據其模型的類別,使用不同的指標評價其性能優劣的過程。常用的聚類模型評價指標有ARI評價法(蘭德繫數)、AMI評價法(互信息)、V-measure評分、FMI評價法和輪廓繫數等。常用的分類模型評價指標有準確率(Accuracy)、精確率(Precision) ...
  • 員工管理系統 因為學業要求,需要完成一個過關檢測,但是因為檢測之前沒有做好準備,且想到之前用mysql+jdbc+Struts2+bootstrap做成了一個ATM系統(主要有對數據的增刪改查操作),應對這次的檢測應該不成問題,但是萬萬沒想到,過關檢測重在“檢測”,需要在規定的時間內完成一個系統,且 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...