在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python的時間操作處理資料總結

馬哥Linux運維 ? 來源:未知 ? 2019-03-30 10:28 ? 次閱讀

python中處理時間的模塊有三個,datetime, time,calendar,融匯貫通三個模塊,才能隨心所欲地用python處理時間。本文就是為此而寫,文章著重點在于梳理出三個模塊的設計脈絡,便于大家記憶里面的api。在需要的時候能夠去查找相應的方法。但由于calendar模塊使用不多,限于篇幅,本文沒有涉及。

1.概述

datetime模塊主要是用來表示日期的,就是我們常說的年月日時分秒,calendar模塊主要是用來表示年月日,是星期幾之類的信息,time模塊主要側重點在時分秒,粗略從功能來看,我們可以認為三者是一個互補的關系,各自專注一塊。方便用戶依據不同的使用目的選用趁手的模塊。

2.從time模塊說起

為了學習time模塊,我們需要先知道幾個與時間相關的概念:

(1)epoch

假設我們要將時間表示成毫秒數,比方說1000000毫秒,那有一個問題必須解決,這個1000000毫秒的起點是什么時間,也就是我們的時間基準點是什么時間?好比我說你身高1.8米,那這個身高是指相對于你站立的地面說的。這個時間基準點就是epoch,在Unix系統中,這個基準點就是1970年1月1日0點整那個時間點。

(2)GMT, UTC

上面我們說epoch表示1970年的起始點,那這個1970年又是相對于哪個基準時間呢?一般來說,就是相對于格林尼治時間,也叫做GMT(Greenwich Mean Time)時間,還叫做UTC(Coordinated Universal Time),為啥一個時間基準有兩個名字?歷史上,先有的GMT,后有的UTC.

UTC是我們現在用的時間標準,GMT是老的時間計量標準。UTC是根據原子鐘來計算時間,而GMT是根據地球的自轉和公轉來計算時間。

所以,可以認為UTC是真正的基準時間,GMT相對UTC的偏差為0。

在實際中,我們的計算機中有一個硬件模塊RCT,里面會實時記錄UTC 時間,該模塊有單獨的電池供電,即使關機也不影響。

有了epoch這個時間基準,又有了UTC這個基準的基準,我們就可以精確地表示一個時間了。

(3)DST, tzone

盡管我們已經可以精確地表示一個時間,很多情況下,我們還是要根據地區實際情況對時間進行一個調整,最常見的就是時區,tzone,相信大家都比較熟悉。

此時,當我們說5點5分這個時間時,還需加上是哪個時區的5點5分才能精確說明一個時間。

另外一個對時間做出調整的就是DST.

DST 全稱是Daylight Saving Time,是說,為了充分利用日光,減少用電,人為地對時間做出一個調整,這取決于不同國家和地區的政策法規。比如說,假設你冬天7點天亮起床,但夏天6點天亮,那么在夏天到來時人為將時間加1個小時,這樣就可以讓你還是覺得7點起床,但實際上是提前一個小時了。

那么,好奇的我們,一定要問一問,python是如何知道tzone和DST這兩個的值呢?答案是通過環境變量。

這里我們只以linux為例來說明一下。

在linux中有TZ環境變量,其值類似這樣:

CST+08EDT,M4.1.0,M10.5.0,這個字符串可以做如下解讀,用空格分開他們,分成三部分

CST+08 EDT, M4.1.0,M10.5.0

第一部分中的CST表示時區的名字,即China Standard Time,也就是我們說的北京時間,+8表示北京時間加上8小時就是UTC時間

第二部分EDT表示DST的名字,我們說DST是因各個國家地區的政策法規不同而不同的,EDT后面也可以像CST后面一樣加一個時間調整值,但由于我們國內只在86年到92年實行過一段時間DST,現在已經廢止,所以后面不用加調整時間。

第三部分表示的是實行DST的開始和結束時間,我們就不細解讀了。

(4)時間的表示,獲取,轉換

time模塊中獲取時間的基本方法是

t = time.time()

它返回的是從epoch到現在的秒數(用浮點數表示),用的是UTC時間。

我們自然而然地想把這個秒數轉為年月日時分秒的形式,而這種轉換又分兩種,一種還是用UTC時間,一種用我們所在時區進行調整后的時間。

time模塊給我們提供了兩個方法,

time. gmtime(t)

time.localtime(t)

二者都返回一個類struct_time的實例,該實例具有如下屬性:

相比用秒數表示的時間,這樣的表示更適合我們理解。

這兩個函數如果調用時不傳參數,它們內部會調用time.time(),并用返回的秒數做轉換。

相反的,python同樣提供了將這兩種struct_time轉為秒數的方法。

calendar.timegm()方法用來把UTC的struct_time(gmtime的返回對象)轉為從epoch開始的秒數

time.mktime()用來把用時區調整過的struct_time(即localtime的返回對象)對象轉為從epoch開始的秒數

也就是說mktime方法會先找到系統中的時區和DST信息,并利用這個信息對struct_time進行調整后再換算成秒數。

另一種常見的需求是在時間和表示時間的字符串之間進行轉換。

time模塊中的strftime和strptime就是做這個用的。

看名字大家就應該知道它們的含義,

strftime 即 string format time,用來將時間格式化成字符串

strptime 即string parse time,用來將字符串解析成時間。

需要注意的是,這里的時間都是struct_time對象。

關于怎么格式化時間,是很簡單的知識,這里就借用官網文檔的內容了。

除了這兩個函數,time模塊中還提供了兩個簡便方法,來幫助將時間轉為字符串

asctime用來將一個struct_time對象轉為標準24字符的字符串,如下所示:

Sun Jun 20 23:21:05 1993

ctime方法與asctime作用相同,只不過它接收的是秒數,在內部,會先把秒數通過localtime轉為struct_time,再往后就與asctime一樣了。

以上就是time模塊的核心內容,我嘗試用一個口訣幫助記憶這些API

time點time得秒數

傳入gm, local time得struct_time

要想變回原秒數

你得傳回calendar.timegm和time. mktime

string f和string p

格式化時間靠哥倆

你要還是嫌費事

asctime ,ctime來助力

專門幫你轉字符串

前者接收struct_time

后者專門處理秒數

分工合作不費力

學好time模塊基本功

做個時間的明白人!

下面,我們要開始學習datetime模塊。

3.datetime模塊

(1)概覽

time模塊解決了時間的獲取和表示,datetime模塊則進一步解決了快速獲取并操作時間中的年月日時分秒信息的能力。

簡單說,該模塊核心的類就三個,date類表示年月日,time類表示時分秒毫秒,這里不要和time模塊搞混淆了。一句順口溜可以幫助記清這個情況:

time里面沒time

藏在datetime里

編的是不是不咋地?嗯,我也這么覺得。

datetime類就是date和time的組合。

有一點需要提前說明一下,time類和datetime類都有一個屬性,它的值是一個tzinfo對象,里面包含了該time或者datetime的時區信息,一般稱這個time或者datetime對象是aware的,它能夠準確換算成自epoch開始的秒數。

如果該屬性設置為None,那么,這時的time對象或者datetime對象就沒有時區信息,具體它表示的是local time還是utc time,需要我們自己在程序中去決定。

這里我們所說的local time是指我們所在時區的時間, utc time指的就是國際標準時間,也就是格林尼治時間。下文同。

請記住一點,date中是沒有時區信息的。

(2)從創建datetime開始

創建datetime對象,我最常用的辦法如下

dt=datetime.datetime.fromtimestamp(time.time())

以上,time.time()獲得自epoch開始的秒數,fromtimestamp方法會將這個秒數轉變成一個datetime對象。

這里有一個問題,這個datetime對象究竟是utc的還是local的?

答案是local的,這是該方法的默認行為。如果你在fromtimestamp方法中傳入一個表示時區的參數,即tzinfo對象,就會按傳入的時區信息進行轉換。

獲得表示當前local時間的datetime對象,還有兩個簡便方法

datetime. datetime. now()

datetime. datetime. today()

以上我們得到的都是local的datetime對象,如何獲得utc的datetime對象呢?有兩個辦法

datetime. datetime. utcfromtimestamp()

datetime. datetime. utcnow()

我們還可以從字符串中創建datetime對象,

方法為datetime.striptime(date_string, format)

其內部還是先調用的time模塊中的striptime方法,獲取struct_time對象,再利用struct_time對象中的年月日時分秒信息構建datetime對象。

同樣的,datetime類也提供了strftime(),asctime(),ctime()方法,相信不說你也知道是做什么的了。

datetime類還提供了一個combine方法,用來將一個date對象和一個time對象組合成一個datetime對象。

需要注意的是,datetime模塊中出現timestamp時,一般可將其理解成time.time()返回的秒數

(3)date和time的創建

date對象的創建和datetime非常相似,

datetime. date. today()

datetime.date.fromtimestamp()都可以創建一個date對象。

當然,你也可以通過構造方法傳入年月日來創建date對象。

相比之下,time對象的創建就很有限,只能通過

datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

這個方法創建。

(4)以上三個對象的操作和timedelta類

在實際使用中,我們有一大塊需求就是對日期進行比較和加減運算。得益于python的操作符重載能力,python中可以方便地對

date對象之間,或者datetime對象之間進行小于(<)比較和減法(-)操作。

注意,這里僅限于同類對象之間,而且,不包括time對象之間。

兩個date對象作減,或者兩個datetime對象之間作減,差值用一個timedelta對象表示。

同理,一個date 對象或者datetime對象也可以加或者減一個timedelta對象。

一個timedelta對象含有三個屬性:days,seconds, microseconds,days屬性可以取負值,另外兩個屬性都只能是正值。

你可以用total_seconds()方法獲得一個timedelta對象的秒數表示。

兩個timedelta對象之間可加,可減,但不能做大小比較,因為這樣沒什么意義。

一個timedelta對象還可以與整數相乘,或通過//操作與一個整數相除。

還可以取反,或者用abs函數獲得絕對值

4.無總結,不進步

本文的目的不在于詳細說明python處理時間日期的api如何使用,而是想通過一個概覽的形式,讓大家抓住time和datetime模塊的設計結構,從而能夠清楚這些模塊提供了哪些能力,在需要的時候能夠想起來去用,至于查詳細的api,應該是可以輕松解決的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UNIX
    +關注

    關注

    0

    文章

    296

    瀏覽量

    41927
  • 函數
    +關注

    關注

    3

    文章

    4361

    瀏覽量

    63635
  • python
    +關注

    關注

    56

    文章

    4821

    瀏覽量

    85668

原文標題:Python中的時間處理大總結

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python常用時間處理操作匯總

    在從事Python相關工作中,Python時間模塊與日常工作密切相關,因此,掌握時間處理模塊及方法十分重要,以下是相關內容介紹:1.time
    發表于 04-19 14:51

    python初學者會遇到的29個操作難點

    初學Python的人總會遇到這樣或者那樣的問題,在我學習Python的這段時間總結了自己的29個問題。
    的頭像 發表于 12-28 17:08 ?2679次閱讀

    Python圖像處理庫Pillow入門教程和代碼資料免費下載

    Pillow 是Python 里的圖像處理庫(PIL:Python Image Library),提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以
    發表于 01-11 16:20 ?30次下載
    <b class='flag-5'>Python</b>圖像<b class='flag-5'>處理</b>庫Pillow入門教程和代碼<b class='flag-5'>資料</b>免費下載

    Python轉義字符使用總結資料免費下載

    本文檔的主要內容詳細介紹的是Python轉義字符使用總結資料免費下載主要內容包括了:Python轉義字符,Python字符串運算符,
    發表于 01-17 17:24 ?6次下載
    <b class='flag-5'>Python</b>轉義字符使用<b class='flag-5'>總結</b><b class='flag-5'>資料</b>免費下載

    Python教程之如何使用使用PIL庫做圖像處理資料說明

    圖像處理是一門應用非常廣的技術,而擁有非常豐富第三方擴展庫的 Python 當然不會錯過這一門盛宴。PIL (Python Imaging Library)是 Python 中最常用的
    發表于 01-18 17:01 ?15次下載
    <b class='flag-5'>Python</b>教程之如何使用使用PIL庫做圖像<b class='flag-5'>處理</b>的<b class='flag-5'>資料</b>說明

    cadence操作常用快捷鍵的資料總結

    本文檔的主要內容詳細介紹的是cadence操作常用快捷鍵的資料總結
    發表于 08-12 08:00 ?0次下載
    cadence<b class='flag-5'>操作</b>常用快捷鍵的<b class='flag-5'>資料</b><b class='flag-5'>總結</b>

    Python的學習資料總結教程

    Python語言是少有的一種可以稱得上即簡單又功能強大的編程語言。你將驚喜地發現 Python語言是多么地簡單,它注重的是如何解決冋題而不是編程語言的語法和結構。Python的官方介紹是Pyt
    發表于 08-17 17:56 ?18次下載
    <b class='flag-5'>Python</b>的學習<b class='flag-5'>資料</b><b class='flag-5'>總結</b>教程

    如何解決python的異常處理方法總結

     python 編輯器推薦使用python tools for visual studio ,個人感覺是最好用的Python 編輯工具,比Wing 之類的好用多了。
    發表于 08-25 18:06 ?33次下載
    如何解決<b class='flag-5'>python</b>的異常<b class='flag-5'>處理</b>方法<b class='flag-5'>總結</b>

    python文件和目錄的操作方法介紹和實例說明

    這篇文章主要介紹了python 文件和目錄的操作方法,簡明總結了文件和目錄操作中常用的模塊、方法,并列舉了一個綜合實例,需要的朋友可以參考下
    發表于 09-16 17:12 ?7次下載
    <b class='flag-5'>python</b>文件和目錄的<b class='flag-5'>操作</b>方法介紹和實例說明

    python文件和目錄的操作方法介紹和實例說明

    這篇文章主要介紹了python 文件和目錄的操作方法,簡明總結了文件和目錄操作中常用的模塊、方法,并列舉了一個綜合實例,需要的朋友可以參考下
    發表于 09-16 17:12 ?0次下載
    <b class='flag-5'>python</b>文件和目錄的<b class='flag-5'>操作</b>方法介紹和實例說明

    Python基本操作題內容總結免費下載

    本文檔的主要內容詳細介紹的是Python基本操作題內容總結免費下載。
    發表于 03-03 15:55 ?10次下載

    基于Python的實時嵌入式軟件測試腳本總結

    基于Python的實時嵌入式軟件測試腳本總結(嵌入式開發技術棧)-該文檔為基于Python的實時嵌入式軟件測試腳本總結文檔,是一份很不錯的參考資料
    發表于 07-30 12:31 ?28次下載
    基于<b class='flag-5'>Python</b>的實時嵌入式軟件測試腳本<b class='flag-5'>總結</b>

    Python在嵌入式項目中的輔助開發總結

    Python在嵌入式項目中的輔助開發總結(嵌入式開發試題)-該文檔為Python在嵌入式項目中的輔助開發總結文檔,是一份很不錯的參考資料,具
    發表于 08-04 10:11 ?5次下載
    <b class='flag-5'>Python</b>在嵌入式項目中的輔助開發<b class='flag-5'>總結</b>

    Python時間處理模塊中處理日期與時間的全面總結

    Python時間處理模塊在日常的使用中用的較多,但是使用的時候基本上都是要查資料,還是有些麻煩的,梳理下,便于以后方便的使用。 時間相關概
    的頭像 發表于 10-12 09:24 ?2259次閱讀
    <b class='flag-5'>Python</b>的<b class='flag-5'>時間</b><b class='flag-5'>處理</b>模塊中<b class='flag-5'>處理</b>日期與<b class='flag-5'>時間</b>的全面<b class='flag-5'>總結</b>

    介紹Python中的日期時間基礎知識

    Python中,處理日期時間是一個很常見的需求。Python提供了強大的日期時間模塊datetime,可以方便地
    的頭像 發表于 04-21 16:50 ?1620次閱讀
    主站蜘蛛池模板: 欧美射射射 | 色中文字幕在线 | 有码视频在线观看 | 国产精品露脸脏话对白 | 在线免费观看黄色小视频 | 欧美性xxxx巨大黑人猛 | 就去干综合 | 成年片色大黄全免费网址 | 在线色色视频 | 四虎在线观看一区二区 | 国产网红主播精品福利大秀专区 | 亚洲人成亚洲人成在线观看 | 午夜韩国理论片在线播放 | 欧洲色 | 丁香九月婷婷 | 男女爱爱免费 | 你懂的视频在线观看资源 | 欧美日韩一区二区三区视频在线观看 | 夜夜爽爽 | 欧美深夜 | 狠狠狠色丁香婷婷综合激情 | 黄黄网站 | 国产精品久久久久久久免费 | 黑人影院 | 午夜影院黄色片 | bt磁力在线搜索 | 欧美三级色 | 韩国一区二区三区视频 | 2017av在线| 亚洲一区日本 | 亚洲综合在线最大成人 | 午夜看片a福利在线 | 欧美性白人极品1819hd | 精品免费视在线视频观看 | 日韩第十页 | 五月激情六月丁香 | 亚洲你xx我xx网站 | 一级国产特黄aa大片 | 欧美成人26uuu欧美毛片 | 久久综合狠狠综合狠狠 | 在线不卡一区 |