小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python時(shí)間處理完全手冊(cè)

 LibraryPKU 2017-11-20

專 欄

?

gw1770df,Python中文社區(qū)專欄作者,從事Python開發(fā)工作,全棧工程師。

博客:

https://word.

Github:

https://github.com/gw1770df

?

處理時(shí)間是工作中非常常見的操作,最基本的獲取當(dāng)前時(shí)間,格式化時(shí)間,計(jì)算兩個(gè)時(shí)間差,時(shí)間戳轉(zhuǎn)換等等. 
Python內(nèi)置兩個(gè)非常常用的時(shí)間處理庫(kù) 
time 和datetime,足以滿足工作中的各種需求。 
datetime 功能更加強(qiáng)大, time 庫(kù)就較為簡(jiǎn)練一些。 
兩個(gè)庫(kù)互補(bǔ)使用,所有問題迎刃而解。

官方文檔Python2.7 datetime(https://docs./2/library/datetime.html?highlight=datetime#module-datetime) 和 time(https://docs./2/library/time.html?highlight=time#module-time)

注意:time 或者 datetime 庫(kù)需要提前import

WIKI:

UNIX時(shí)間,或稱POSIX時(shí)間是UNIX或類UNIX系統(tǒng)使用的時(shí)間表示方式:從協(xié)調(diào)世界時(shí)1970年1月1日0時(shí)0分0秒起至現(xiàn)在的總秒數(shù),不考慮閏秒。 在多數(shù)Unix系統(tǒng)上Unix時(shí)間可以通過date +%s指令來檢查。

各地日期和時(shí)間表示法:yyyy = 年份,mm = 月份,dd = 日期,MMM = 月份三字母縮寫,mmmm = 月份全名,hr = 小時(shí),mi = 分鐘,se = 秒鐘 
國(guó)際標(biāo)準(zhǔn)ISO 8601:yyyy-mm-dd,hr:mi:se(24小時(shí)制) 
中國(guó):yyyy年m月d日;hr時(shí)mi分se秒;hr:mi:se(12/24小時(shí)制) 
美國(guó):mm/dd/yyyy;mm/dd/yy;mmmm dd, yyyy;hr:mi:se(12小時(shí)制) 
澳大利亞:dd/mm/yyyy;MMM dd, yyyy;hr:mi:se a.m./p.m.(12/24小時(shí)制)

時(shí)區(qū)是地球上的區(qū)域使用同一個(gè)時(shí)間定義。以前,人們通過觀察太陽的位置(時(shí)角)決定時(shí)間,這就使得不同經(jīng)度的地方的時(shí)間有所不同(地方時(shí))。1863年,首次使用時(shí)區(qū)的概念。時(shí)區(qū)通過設(shè)立一個(gè)區(qū)域的標(biāo)準(zhǔn)時(shí)間部分地解決了這個(gè)問題。

一. 獲取并格式化時(shí)間

使用time模塊獲取當(dāng)前時(shí)間

  1. print time.strftime('%Y-%m-%d %H:%M:%S')

  2. # Out: '2016-12-01 16:10:27'

使用datetime模塊獲取當(dāng)前日期和當(dāng)前時(shí)間

  1. # 獲取當(dāng)前日期

  2. today = datetime.date.today()

  3. print today.strftime('%Y-%m-%d')

  4. # Out: '2016-12-01'  # 獲取當(dāng)前日期


  5. now = datetime.datetime.now()

  6. print now.strftime('%Y-%m-%d %H:%M:%S')

  7. # Out: '2016-12-01 16:14:22' # 獲取當(dāng)前日期時(shí)間

二. 轉(zhuǎn)換時(shí)間格式

例如我們拿到了一個(gè)時(shí)間字符串 161201 16:14:22 需要將其轉(zhuǎn)換成其他格式。

  1. struct_time = time.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  2. # struct_time 為一個(gè)時(shí)間元組對(duì)象

  3. print time.strftime('%Y-%m-%d %H:%M:%S', struct_time)

  4. # Out: '2016-12-01 16:14:22'

  1. dt = datetime.datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  2. # dt 為 datetime.datetime對(duì)象  # 通過調(diào)用 timetuple()方法將datetime.datetime對(duì)象轉(zhuǎn)化為時(shí)間元組

  3. print dt.strftime('%Y-%m-%d %H:%M:%S')

  4. # Out: '2016-12-01 16:14:22'

三. 計(jì)算兩個(gè)時(shí)間間隔

計(jì)算時(shí)間間隔使用datetime模塊比較方便。 
datetime.date為日期對(duì)象,最小精度為天。 
datetime.datetime為日期時(shí)間對(duì)象,最小精度為妙(毫秒也可以) 
實(shí)際使用中按需選擇。

  1. 計(jì)算2016-12-1和1990-1-1中間天數(shù)和秒數(shù)

    1. dt = datetime.date(2016,12,1) - datetime.date(1990,1,1)

    2. dt.days # 間隔天數(shù)


    3. # 將字符串轉(zhuǎn)換為datetime.date對(duì)象


    4. dt_a = datetime.datetime.strptime('2016-12-1', '%Y-%m-%d') # datetime.date 無 strptime 方法

    5. dt_b = datetime.datetime.strptime('1990-1-1', '%Y-%m-%d') # 雖然格式化時(shí)間的時(shí)候%m為兩位數(shù)月份

    6.                                                        # 但是反格式化時(shí)一位月份也可工作

    7. dt = dt_a - dt_b

    8. dt.days # 為 間隔天數(shù)

    9. dt.total_seconds() # 為 間隔秒數(shù)

  2. 計(jì)算兩個(gè)時(shí)間戳間隔時(shí)間

    1. timestamp_a, timestamp_b = 1480582517, 1480472517

    2. dt = datetime.datetime.fromtimestamp(timestamp_a) - datetime.datetime.fromtimestamp(timestamp_b)

    3. print dt.days, dt.total_seconds()


    4. # Out: 1 110000.0

四. 獲取前N天,或者后N天時(shí)間

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

  1. now = datetime.datetime.now()

  2. before_time = now - datetime.timedelta(days=1)

  3. after_time = now + datetime.timedelta(days=1)

  4. print before_time

  5. # Out: 2016-11-30 17:03:40.420000

  6. print after_time

  7. # Out: 2016-12-02 17:03:40.420000

五. 時(shí)間戳相關(guān)計(jì)算

時(shí)間戳是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù)。 
通過時(shí)間戳可以快速直接得到很多信息

  1. ts = int(time.time()) # ts = 1480583196

  2. print ts / 86400 % 7 + 3 # 獲取時(shí)間戳對(duì)應(yīng)的星期 0 周日 - 6 周六

  3. # Out: 3 # 周四

  4. # ===============

  5. timestamp_a, timestamp_b = 1480582517, 1480472517

  6. ts = timestamp_a - timestamp_b

  7. print ts / 86400 # 獲取兩個(gè)時(shí)間戳相隔天數(shù)

  8. # ===============

  9. # 獲取當(dāng)天00:00:00的時(shí)間戳

  10. ts = int(time.time())

  11. print ts / 86400 * 86400

  12. # Out: 1480550400

  13. # ===============

  14. # 獲取當(dāng)天23:59:59的時(shí)間戳

  15. ts = int(time.time())

  16. print ts / 86400 * 86400 + 86400 - 1

  17. # Out: 1480636799

個(gè)人認(rèn)為時(shí)間戳才是最有魅力的

六. 各種數(shù)據(jù)類型間轉(zhuǎn)換

  1. str > datetime.datetime

    1. datetime.datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  2. str > 時(shí)間元組

    1. dt = datetime.datetime.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

    2. dt.timetuple()


    3. # or


    4. struct_time = time.strptime('161201 16:14:22', '%y%m%d %H:%M:%S')

  3. 時(shí)間戳 > datetime.datetime 或 datetime.date

    1. datetime.datetime.fromtimestamp(時(shí)間戳)


    2. # or


    3. datetime.date.fromtimestamp(時(shí)間戳)

  4. 時(shí)間戳 > 時(shí)間元組

    1. time.gmtime(時(shí)間戳)

  5. 時(shí)間元組 > 時(shí)間戳

    1. time.mktime(時(shí)間戳)

  6. 時(shí)間元組 > datetime.datetime 或 datetime.date

    1. datetime.datetime.fromtimestamp(time.mktime(時(shí)間元組))


    2. # or


    3. datetime.date.fromtimestamp(time.mktime(時(shí)間元組))

  7. 時(shí)間戳 > 時(shí)間元組

    1. time.gmtime(時(shí)間戳)


    2. # or


    3. dt = datetime.datetime.fromtimestamp(時(shí)間戳)

    4. dt.timetuple()

七、格式化與反格式化控制字符對(duì)照表

字符含義例子
%a當(dāng)?shù)馗袷降男瞧诳s寫Sun,Mon...Sat(en_US);So,Mo...Sa(de_DE)
%A當(dāng)?shù)馗袷降男瞧谌?/span>Sunday,Monday...Saturday(en_US);Sonntag,Montag...Samstag(de_DE)
%w星期的數(shù)字表示0表示周日,6表示周六0,1...6
%d日,當(dāng)月第幾天,兩位數(shù)01,02...31
%b當(dāng)?shù)馗袷降脑路菘s寫Jan,Feb...Dec(en_US);Jan,Feb...Dez(de_DE)
%B當(dāng)?shù)馗袷降脑路萑?/span>January, February,...,December(en_US);Januar,Februar...Dezember(de_DE)
%m月份的數(shù)字表示,兩位數(shù)01,02...12
%y年份表示,不帶世紀(jì),兩位數(shù)00,01...99
%Y年份表示1970,1971...2016
%H小時(shí) 0-2300,01...23
%I小時(shí) 01-1201,02...12
%p當(dāng)?shù)馗袷降纳衔缦挛绫硎?/span>AM,PM(en_US);am,pm(de_DE)
%M分鐘,兩位數(shù)00,01...59
%S秒,兩位數(shù)00,01...59
%f微妙,六位數(shù)000000,000001...999999
%z時(shí)區(qū)偏移量,表示為+HHMM或-HHMM或空(空),+0000,-0400,+0800
%Z時(shí)區(qū)名字(空),UTC, EST, CST
%j日,當(dāng)年第幾天,三位數(shù)001,002...366
%U周,在年第幾周,周日為一周的第一天,新年第一個(gè)星期日第0周,兩位數(shù)00,01...53
%W周,在年第幾周,周一為一周的第一天,新年第一個(gè)星期一第0周,兩位數(shù)00,01...53
%c當(dāng)?shù)馗袷降臅r(shí)間日期表示Tue Aug 16 21:30:00 1988 (en_US);Di 16 Aug 21:30:00 1988 (de_DE)
%x當(dāng)?shù)馗袷降娜掌诒硎?/span>08/16/88 (None);08/16/1988 (en_US);16.08.1988 (de_DE)
%X當(dāng)?shù)馗袷降臅r(shí)間表示21:30:00 (en_US);21:30:00 (de_DE)
%%%字符%

ARTICLES
近期熱門文章


生成器

關(guān)于生成器的那些事兒

爬蟲代理

如何構(gòu)建爬蟲代理服務(wù)

地理編碼

怎樣用Python實(shí)現(xiàn)地理編碼

nginx日志

使用Python分析nginx日志


淘寶女郎

一個(gè)批量抓取淘女郎寫真圖片的爬蟲

IP代理池

突破反爬蟲的利器——開源IP代理池

布隆去重

基于Redis的Bloomfilter去重(附代碼)

內(nèi)建函數(shù)

Python中內(nèi)建函數(shù)的用法

QQ空間爬蟲

QQ空間爬蟲最新分享,一天 400 萬條數(shù)據(jù)

對(duì)象

Python教你找到最心儀對(duì)象

線性回歸

Python機(jī)器學(xué)習(xí)算法入門之梯度下降法實(shí)現(xiàn)線性回歸

匿名代理池

進(jìn)擊的爬蟲:用Python搭建匿名代理池

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多