成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python時間模塊,超實用總結!

開發 后端
Python內置一個時間模塊datetime,提供我們關于時間的表達。記錄時間無所不在,日志文件,程序運行起始時間和時長,銷量預測的特征等等,我們都能看到時間的身影。

今天是Python時間模塊核心使用邏輯。本篇思維導圖如下:

Python內置一個時間模塊datetime,提供我們關于時間的表達。記錄時間無所不在,日志文件,程序運行起始時間和時長,銷量預測的特征等等,我們都能看到時間的身影。

這篇專題總結datetime模塊最主要用法,希望通過此文,大家使用那些時間處理的常用API時,能信手拈來,不用help函數,不用搜索。

1. 核心邏輯

datetime模塊提供日期和時間各自分類的對象,日期處理相關的對象date,時間處理相關的time,日期和時間的完整結合對象datetime.

日期和時間的加減操作得到timedelta對象.

此時此刻 2020-8-28 21:45,這個時間是本地時間,很明顯紐約時間肯定不是此值,柏林時間也肯定不是這個值。Python為支持不同地區的時間表達,特意抽象出tzinfo對象,并有一個默認實現對象.

以上就是datetime模塊的幾個核心對象以及對應的現實意義。

2. date、time和datetime對象

下面介紹最基本3個對象的最基本用法。首先,從datetime模塊導入3個對象

  1. In [1]: from datetime import date,time,datetime     

構造一個日期date實例,2020年9月1日:

  1. In [2]: date(2020,9,1)                                                           
  2. Out[2]: datetime.date(2020, 9, 1) 

構造一個時間time實例,10點10分0秒:

  1. In [3]: time(10,10,0)                                                            
  2. Out[3]: datetime.time(10, 10) 

構造一個日期+時間的完整datetime實例,2020年9月1日 10點10分0秒:

  1. In [4]: datetime(2020,9,1,10,10,10)                                              
  2. Out[4]: datetime.datetime(2020, 9, 1, 10, 10, 10) 

自己構造時間沒什么意義,更有意義的是打印當前時間,比如此時程序啟動打印下時間,如果程序可能運行十幾天,很明顯使用日期+時間的完整datetime實例。

此方法歸屬于datetime類上的方法,所以無須構造datetime實例,直接如下:

  1. datetime.today() # datetime類的today方法 
  2. Out[5]: datetime.datetime(2020, 8, 28, 22, 0, 47, 439509) 

打印結果顯示年月日時分秒毫秒 還可以使用類方法now:

  1. In [6]: datetime.now()                                                           
  2. Out[6]: datetime.datetime(2020, 8, 28, 22, 1, 28, 737166) 

直接打印當前時間,返回日期+時間的字符串結果:

  1. In [7]: print(datetime.now())                            
  2. 2020-08-28 22:02:57.217572 

如果我們不想顯示毫秒,這就涉及到日期+時間的打印格式化問題。使用datetime類方法strftime(string format time),用法如下:

  1. In [8]: datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')                    
  2. Out[8]: '2020-08-28 22:06:20' 

這就涉及到打印格式化字符,常用的幾個:

如果讀入一個時間列,此時type為str,為了對此作時間運算,需要將其轉化為datetime,使用strptime(string parse time),它是datetime的類方法:

  1. In [11]: datetime.strptime('2020-08-28 22:06:20','%Y-%m-%d %H:%M:%S')            
  2. Out[11]: datetime.datetime(2020, 8, 28, 22, 6, 20) 

字符型日期+時間要想正確轉化為datetime對象,字符串和格式必須要匹配,否則會拋錯:

  1. In [13]: datetime.strptime('2020-08-28 22:06:20',\ 
  2.                            '%Y/%m/%d %H:%M:%S')  
  3.  
  4. ValueError: time data '2020-08-28 22:06:20'  
  5. does not match format '%Y/%m/%d %H:%M:%S' 

3. 基本運算

有時需要求偏離某個時間的時間,timedelta對象能滿足此需求。

比如,求當前時間的前12小時的日期+時間。

首先,導入timedelta類:

  1. In [15]: from datetime import timedelta      

直接使用當前時間減去timedelta表示的12小時長度,注意第一個參數的含義為days,所以除以 24:

  1. In [16]: datetime.now() - timedelta(12/24)                                       
  2. Out[16]: datetime.datetime(2020, 8, 28, 10, 22, 44, 287246) 

由上面這個用法,可以總結為:

datetime1 - timedelta1 = datetime2

所以 datetime1 - datetime2 = timedelta1,故兩個時間相減得到timedelta類型的實例。

除此之外,還有一個小方法,可能會用到,就是datetime類上的combine方法,它能組合date實例和time實例為datetime實例,如下所示:

  1. In [17]: datetime.combine(date(2020,9,1),time(10,10,0))                          
  2. Out[17]: datetime.datetime(2020, 9, 1, 10, 10) 

4 關于tzinfo

為了更好統一全球時間,世界規定了一個UTC時間,即全球統一時間,比如假設與之相比北京時間比它早8小時,曼谷比它早7小時等。

比如打印當前時間時,

  1. ```python 
  2. In [6]: print(datetime.now()) 
  3. 2020-08-28 22:33:35.393709       

以上顯示的這個時間,其實并不完整,我當然明白它是我所在地的時間,但是其他國家的開發者看到這個時間時,或許以為是UTC標準下的時間。若是這樣解讀,顯然會和實際有一個時差問題。

有的讀者會說,我在打印格式化時添加時區信息可以嗎,我們實驗一下:

  1. In [19]: datetime.strftime(datetime.now(),\ 
  2.                            '%Y-%m-%d %H:%M:%S %Z')                
  3. Out[19]: '2020-08-28 22:39:44 ' 

時區信息為空,所以沒能解決問題。之所以時區信息會為空,是因為datetime.now()時未給定tzinfo值。

所以,我們需要自己重新定義一個tzinfo,即實現一個tzinfo對象。

此類BJinfo繼承tzinfo,然后實現其中的3個方法:

  1. from datetime import tzinfo 
  2.  
  3. class BJinfo(tzinfo): 
  4.     """BJinfo""" 
  5.     def utcoffset(self, dt): 
  6.         return timedelta(hours=8
  7.  
  8.     def tzname(self, dt): 
  9.         return "UTC 8" 
  10.  
  11.     def dst(self, dt): 
  12.         return timedelta(hours=8

此時再打印當前時間時,賦上tzinfo值:

  1. nowt = datetime.now(tz=BJinfo()) 
  2. In [32]: In [6]: print(nowt)                                
  3. 2020-08-28 22:52:20.328446+08:00 

再格式化打印時區信息:

  1. ...:     '%Y-%m-%d %H:%M:%S %Z')                      
  2. 36]: '2020-08-28 22:52:20 UTC 8' 

透過時區信息BJinfo 定義的三個方法,便能確認時間2020-08-28 22:52:20是比UTC快8個小時的時區下,所對應的一個時間。

總結

以上就是本專題對datetime模塊核心對象的使用總結,大綱如下:

  • 核心邏輯
  • date、time和datetime對象
  • 基本運算
  • 關于tzinfo

 

 

責任編輯:趙寧寧 來源: Python與算法社區
相關推薦

2018-09-07 23:38:45

小程序開發框架

2022-01-17 10:50:15

Python代碼內存

2025-03-04 10:49:51

2020-12-23 11:08:10

Python代碼文本

2024-02-01 18:06:04

Python編程系統

2022-08-07 10:44:00

JSONPython對象

2015-03-20 17:05:17

PaaS公有云云服務

2022-04-29 08:15:40

Python技巧Max

2025-02-17 10:50:37

2022-04-19 13:07:25

SchedulePython

2022-07-29 09:01:20

Chrome試源代碼調試技巧

2023-01-29 09:18:14

ScrollendJavaScript事件

2015-09-10 10:20:49

2024-02-23 18:17:57

Python腳本開發

2010-03-03 13:39:41

Python os模塊

2013-12-12 17:14:10

Linuxvim

2020-08-27 13:45:24

Linux監控工具命令

2019-08-16 09:22:38

技術調試互聯網

2019-05-21 15:28:00

Tomcat腳本權限
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区在线观看 | 97avcc| 奇米av| 欧美不卡一区二区 | 黑色丝袜三级在线播放 | 亚洲精品无人区 | 精品一区在线 | 午夜日韩 | 在线观看国产精品一区二区 | 久久久精品国产 | 日韩成人专区 | 日本视频免费观看 | 欧美日韩高清免费 | 小h片免费观看久久久久 | 91精品中文字幕一区二区三区 | 欧美精品在线一区二区三区 | 精品国产一区二区三区性色av | 欧美激情综合色综合啪啪五月 | 911影院| 成人精品视频在线观看 | 天堂综合 | 欧美一区二区三区 | 欧美一级毛片在线播放 | 午夜合集| 中文字幕免费中文 | 亚洲欧美高清 | 亚洲人人 | 成人日批视频 | 亚洲国产欧美日韩 | 一区二区三区免费观看 | 午夜精品久久久久久久久久久久久 | 一区二区三区小视频 | 99久久99| 国产一区黄色 | 亚洲一区二区欧美 | 日韩久久成人 | 亚洲国产欧美一区二区三区久久 | 日本aa毛片a级毛片免费观看 | 欧美日韩中文在线观看 | 范冰冰一级做a爰片久久毛片 | 国产一区二区美女 |