Python 內置模塊之 時間模塊 datetime

概述

datatime模塊重新封裝了time模塊,提供更多接口,datetime庫定義了2個常量和5個類。

2個常量分別是:

  1. MINYEAR=1
  2. MAXYEAR=9999

5個類分別是:

  1. date類:表示日期的類
  2. time類:表示時間的類
  3. datetime類:表示時間日期的類
  4. timedelta類:表示兩個datetime對象的差值;
  5. tzinfo類:表示時區的相關信息

1、date類

構造函數

__new__(year,month,day):默認的構造函數,創建date類的對象時直接傳入year,month,day三個參數即可返回對應的日期。fromtimestamp(t):使用時間戳構造對象,使用方法為:datetime.date.fromtimestamp(t),傳入參數t為一個時間戳,返回時間戳t對應的日期。today():使用今天的日期構造對象,使用方法為:datetime.date.today(),無參數,返回今天的日期。fromordinal(n):使用日期序數構造對象,使用方法為:datetime.date.fromordinal(n),傳入參數為一個整數序數,代表從公元1年1月1日開始的序數,序數每增加1代表增加1天,返回最終計算出的日期。

方法

  1. timetuple():返回日期對應的time.struct_time對象,格式為time.struct_time(tm_year=1, tm_mon=1, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=2, tm_isdst=-1) 。
  2. toordinal():相當于fromordinal(n)的逆過程,返回值即為fromordinal(n)中的日期序數n。
  3. weekday():返回該日期對應星期幾,用[0,6]代表星期一到星期日。
  4. isoweekday():作用同weekday(),用[1,7]代表星期一到星期日。
  5. isocalendar():返回一個三元組,格式為(year,week_number,weekday),分別代表年,第幾周,星期幾。
  6. isoformat():返回標準日期格式:YYYY-MM-DD。
  7. ctime():返回格式為:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號如下。
  9. replace(year,month,day):傳入參數為year,month,day,返回對應的新日期。
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%f 小數秒(000000-999999)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身eg:
%Y-%m-%d %H:%M:%S.%f    2021-11-11 10:52:16.000001

示例

from datetime import *
import timeprint('date.max:', date.max)             # date.max: 9999-12-31
print('date.min:', date.min)             # date.min: 0001-01-01
print('date.today():', date.today())     # date.today(): 2016-10-26
print('date.fromtimestamp():', date.fromtimestamp(time.time()))   # date.fromtimestamp(): 2016-10-26now = date(2016, 10, 26)
tomorrow = now.replace(day = 27)
print('now:', now, ', tomorrow:', tomorrow)   # now: 2016-10-26 , tomorrow: 2016-10-27
print('timetuple():', now.timetuple())        # timetuple(): time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=300, tm_isdst=-1) 
print('weekday():', now.weekday())            # weekday(): 2 
print('isoweekday():', now.isoweekday())      # isoweekday(): 3
print('isocalendar():', now.isocalendar())    # isocalendar(): (2016, 43, 3)
print('isoformat():', now.isoformat())        # isoformat(): 2016-10-26
print('strftime():', now.strftime("%Y-%m-%d"))# strftime(): 2016-10-26

2、time類

構造函數

__new__(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建time類的對象時直接傳入相應參數即可返回對應的時間。

方法

  1. isoformat():返回標準時間格式:HH:MM:SS.mmmmmm+zz:zz。
  2. strftime(format):把時間按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
  3. utcoffset():返回timezone的偏移量。
  4. tzname():返回timezone的名稱。
  5. replace():傳入對應的參數,返回新的時間。

示例

from  datetime import *tm = time(23, 46, 10)
print('tm:', tm)
print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
tm1 = tm.replace(hour=20)
print('tm1:', tm1)
print('isoformat():', tm.isoformat())
print('strftime()', tm.strftime("%X"))# tm: 23:46:10
# hour: 23, minute: 46, second: 10, microsecond: 0
# tm1: 20:46:10
# isoformat(): 23:46:10
# strftime() 23:46:10

3、datetime類

datetime類是date類和time類的合體,包含前兩個類的全部參數。

構造函數

__new__(year, month, day, hour=0, minute=0, second=0,microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建datetime類的對象時直接傳入相應參數即可返回對應的時間日期。fromtimestamp(t):使用時間戳構造對象,傳入參數t為一個時間戳,返回時間戳t對應的日期和時間。utcfromtimestamp(t):使用時間戳構造對象,傳入參數t為一個時間戳,返回時間戳t對應的UTC(時間標準時間)日期和時間。now():使用當前日期和時間構造對象,無參數,返回當前的日期和時間。utcnow():使用當前日期和時間構造對象,無參數,返回當前的UTC(時間標準時間)日期和時間。combine(date,time):使用date和time構造對象,傳入參數為1個date對象和1個time對象,返回計算出的日期。

方法

  1. timetuple():返回日期時間對應的time.struct_time對象,格式為time.struct_time(tm_year=1973, tm_mon=11, tm_mday=29, tm_hour=21, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=333, tm_isdst=-1) 。
  2. utctimetuple():與timetuple()相似,返回日期時間對應的UTC(時間標準時間)time.struct_time對象。
  3. astimezone():返回的格式中加入時區信息,格式為:1973-11-29 21:33:09+08:00。
  4. date():返回date部分
  5. time():返回time部分,tzinfo設置為None。(另有timetz()方法返回有相同tzinfo的time())
  6. isoformat(sep):返回標準日期時間格式,傳入參數sep可設置日期和時間的分隔符,默認為'T':1973-11-29T21:33:09。
  7. ctime():返回格式為:Sat Sep 8 00:00:00 2018
  8. strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
  9. strptime(date_string,format):將字符串格式轉換為日期格式,具體的格式化符號與date類中介紹的相同。
  10. replace():傳入對應的參數,返回新的日期時間。

示例

from  datetime import *
import timeprint('datetime.max:', datetime.max)
print('datetime.min:', datetime.min)
print('datetime.resolution:', datetime.resolution)
print('today():', datetime.today())
print('now():', datetime.now())
print('utcnow():', datetime.utcnow())
print('fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time()))
print('utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time()))# datetime.max: 9999-12-31 23:59:59.999999
# datetime.min: 0001-01-01 00:00:00
# datetime.resolution: 0:00:00.000001
# today(): 2016-10-26 23:12:51.307000
# now(): 2016-10-26 23:12:51.307000
# utcnow(): 2016-10-26 15:12:51.307000
# fromtimestamp(tmstmp): 2016-10-26 23:12:51.307000
# utcfromtimestamp(tmstmp): 2016-10-26 15:12:51.307000

4、timedelta類

timedelta類代表兩個datetime對象之間的時間差。

構造函數

__new__(days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0):默認的構造函數,創建timedelta類的對象時直接傳入相應參數即可返回對應單位的時間差。

方法

  1. 支持兩個timedelta對象之間的加、減操作。
  2. 支持對一個timedelta進行取正、取負、取絕對值等操作。
  3. 支持兩個timedelta對象之間的比較。
  4. 支持一個timedelta對象乘以、除以一個整數的操作

示例

# coding:utf-8
from  datetime import *dt = datetime.now()
dt1 = dt + timedelta(days=-1) # 昨天
dt2 = dt - timedelta(days=1)  # 昨天
dt3 = dt + timedelta(days=1)  # 明天
delta_obj = dt3-dt
print(type(delta_obj),delta_obj)                  # <type 'datetime.timedelta'> 1 day, 0:00:00
print(delta_obj.days ,delta_obj.total_seconds())  # 1 86400.0

5、tzinfo類

tzinfo類是一個虛擬基類,代表時區(time zone),創建子類時必須重寫name(),utcoffset(),dst()這三個方法。

#! /usr/bin/python
# coding=utf-8from datetime import datetime, tzinfo,timedelta"""
tzinfo是關于時區信息的類
tzinfo是一個抽象類,所以不能直接被實例化
"""
class UTC(tzinfo):"""UTC"""def __init__(self,offset = 0):self._offset = offsetdef utcoffset(self, dt):return timedelta(hours=self._offset)def tzname(self, dt):return "UTC +%s" % self._offsetdef dst(self, dt):return timedelta(hours=self._offset)#北京時間
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷時間
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京時間轉成曼谷時間
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))#計算時間差時也會考慮時區的問題
timespan = beijing - bangkok
print "時差:",timespan#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 時差: -1 day, 23:00:00

6、一些關于時間的計算

獲取兩個日期間所有月份

def get_month_range(start_day,end_day):months = (end_day.year - start_day.year)*12 + end_day.month - start_day.monthmonth_range = ['%s-%s'%(start_day.year + mon//12,mon%12+1) for mon in range(start_day.month-1,start_day.month + months)]return month_rangeprint(get_month_range(datetime.date(2016, 1, 31),datetime.date(2017,3,26))) 
# 輸出:['2016-1','2016-2','2016-3','2016-4','2016-5','2016-6','2016-7','2016-8','2016-9','2016-10','2016-11','2016-12','2017-1','2017-2','2017-3']

計算兩個日期相差多少個月

import datetime
from dateutil import rruled1 = datetime.date(2016, 2, 29)
d2 = datetime.date(2019, 3, 31)
months = rrule.rrule(rrule.MONTHLY, dtstart=d1, until=d2).count()
print(f"months={months}")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454625.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454625.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python自學網站需要多長時間-怎么自學python,大概要多久?

我潑點冷水&#xff1a;建議還是要慎重選擇上來新手就自學Python。如果想認認真真打好基礎&#xff0c;還是要至少從Java學起。換句話說&#xff0c;先學會Java&#xff0c;然后再學Python不遲。 Python的最大優勢是簡單明快&#xff0c;最大問題也是簡單明快。 我面試過很多用…

[c/c++] programming之路(25)、字符串(六)——memset,Unicode及寬字符,strset

一、memset #include<stdio.h> #include<stdlib.h> #include<memory.h>void *mymemset(void *p, int num, int len) {char *px (char *)p;if (p NULL)return NULL;while (len>0){*px (char)num;px;len--;}return p;//因為上述代碼是對px進行操作&#…

linux切換sid,linux – 將sid字段添加到ps -f輸出

我正在閱讀ps手冊頁,有一些我不明白的東西.-f does full-format listing. This option can be combined with many otherUNIX-style options to add additional columns. It also causes thecommand arguments to be printed. When used with -L, the NLWP (number ofthreads) …

使用Cross-Page Postback(跨頁面提交)在頁面間傳遞數據

頁面間傳遞數據的幾種方法 在頁面間傳遞數據時&#xff0c;我們有以下幾種選擇&#xff1a; 1、Query String 一個很常見的方法&#xff0c;Query String是URL中問號之后的那一部分。其優點在于它是輕量級的&#xff0c;不會給服務器帶來任何負擔。而它也有幾個缺點&#xff1a…

synchronized 和 lock 的區別

lock更靈活&#xff0c;可以自由定義多把鎖的加鎖解鎖順序&#xff08;synchronized要按照先加的后解順序&#xff09; 提供多種加鎖方案&#xff0c;lock 阻塞式, trylock 無阻塞式, lockInterruptily 可打斷式&#xff0c; 還有trylock的帶超時時間版本。 本質上和監視器鎖&a…

win10怎么設置默認輸入法_win10系統輸入法失效打不了字怎么辦

大家好&#xff0c;今天分享一篇來自小白系統官網(xiaobaixitong.com)的圖文教程。最近有用戶反映自己電腦上的win10系統出現輸入法失效打不了字的問題&#xff0c;想知道有沒有解決該問題的方法。小編經過一番查找后給大家整理出了針對該問題的解決方法&#xff0c;下面就讓我…

Python 內置模塊之 時間模塊 time

time模塊提供各種時間相關的功能,與時間相關的模塊有&#xff1a;time,datetime,calendar 必要說明&#xff1a; 這個模塊的功能不是適用于所有的平臺 這個模塊中定義的大部分函數是調用C平臺上的同名函數實現 一些術語和約定的解釋&#xff1a; 時間戳(timestamp)的方式,返…

linux找link原路徑,readlink命令找出符號鏈接所指向的位置

1.釋義找出符號鏈接所指向的位置2.系統幫助用法&#xff1a;readlink [選項]... 文件...輸出符號鏈接值或權威文件名。-f, --canonicalize遞歸跟隨給出文件名的所有符號鏈接以標準化&#xff0c;除最后一個外所有組件必須存在-e, --canonicalize-existing遞歸跟隨給出文件名的所…

國產毫米波雷達領域的領頭羊,木牛科技將在明年量產77GHz汽車雷達

國內的汽車毫米波雷達市場風潮起于2015年前后&#xff0c;彼時國內的毫米波雷達企業已經發展很多年&#xff0c;但大都在軍工領域。 面對突然出現的汽車毫米波雷達市場熱潮&#xff0c;國內很快涌現出了一大批雷達的初創企業&#xff0c;努力擠進這一亦新亦舊的市場。 說是新&a…

面試風云錄(02) - 與頂級CTO交手的難忘經驗...

大部分面試都是尋找團隊伙伴或成員&#xff0c;很少是面試高層&#xff0c;因為職級比我們高的人&#xff0c;自然會有更高層的人面試他們&#xff0c;但這次分享的不是一般面試&#xff0c;而是我跟頂級CTO交手的經驗&#xff0c;盡管為了顧慮當事人隱私&#xff0c;我已經隱去…

MySQL 之 performance_schema

背景&#xff1a; 自 MySQL5.5開始&#xff0c;MySQL新增了一個數據庫&#xff1a;PERFORMANCE_SCHEMA&#xff0c;主要用于收集數據庫服務器性能參數。此庫中表的存儲引擎均為PERFORMANCE_SCHEMA&#xff08;用戶不能創建存儲引擎為PERFORMANCE_SCHEMA的表&#xff09;。MySQ…

DNS解析原理與Bind部署DNS服務

DNS是什么&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系統&#xff09;是互聯網上最核心的帶層級的分布式系統&#xff0c;它負責把域名轉換為IP地址、反查IP到域名的反向解析以及宣告郵件路由等信息&#xff0c;使得基于域名提供服務稱為可能&#xff0c…

qt 獲取本機的wifi密碼_還在記密碼?這款開源免費的賬號密碼管理神器趕緊收了...

工作中涉及到得賬號密碼&#xff0c;你是怎么記錄得&#xff1f;如果是文檔word或者excel記錄&#xff0c;那么回非常麻煩&#xff0c;每次還得打開。如果是瀏覽器自己記錄&#xff0c;如果更新密碼&#xff0c;又記不得。尷尬&#xff01;今天大衛給大家推薦一款開源免費得賬號…

adaptec raid linux,adaptecraid卡管理軟件在windows和linux下的安裝使用介紹(7頁)-原創力文檔...

adaptec raid卡管理軟件在 windows和linux下的安裝使用文檔l.adaptec raid卡的管理軟件在 windows下安裝后的運行界面如下圖:adaplecadaplec點擊connect后&#xff0c;便可進入管理軟件的主界面&#xff0c;如下圖:在這個主界面中可以選擇要操作的 raid卡&#xff0c;例如本例中…

think queue 消息隊列初體驗

使用的是tp5 自帶的消息隊列 thinkphp top里的 消息隊列框架 think-queue 這是thinkphp官方團隊開發的一個專門支持隊列服務的擴展包 消息隊列應用場景&#xff1a; 消息隊列適用于大并發或者返回結果 時間有點長并需要批量操作的第三方接口。 當前使用快遞單號獲取&#xf…

Linux快速計算MD5和Sha1命令

Linux計算MD5和Sha1的命令 MD5 MD5即Message-Digest Algorithm 5&#xff08;信息-摘要算法 5&#xff09;&#xff0c;用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一&#xff08;又譯摘要算法、哈希算法&#xff09;&#xff0c;主流編程語言普遍已有MD5實現。 S…

win10無法運行C語言文件,主編告訴你win10打不開pdf文件的詳盡處理辦法

win10打不開pdf文件的問題大家有沒有發現呢&#xff1f;今天有一個網友就來向小編詢問處理辦法。其實不知都還有多少用戶遇到了win10打不開pdf文件的問題&#xff0c;我們可以嘗試著自己來處理win10打不開pdf文件的問題&#xff0c;我們其實只需要這樣操作&#xff1a;1、2、就…

MySQL 自帶的四個數據庫 介紹

背景 通過終端登錄mysql數據庫&#xff08;或直接用客戶端工具&#xff09;查看全部數據庫,如下&#xff1a; 5.7及以上自帶庫為&#xff1a;information_schema、mysql、performance_schema、sys&#xff1b; 5.6自帶的庫為&#xff1a;information_schema、mysql、performa…

簡單繪圖軟件實現mfc大作業_紙筆書寫|可直播可微課可寫作業可批改的手寫板,快來愛“我”吧...

線上教學進入下半場&#xff0c;我們需要什么&#xff1f;走過線上教育的探索期&#xff0c;相信不少老師已經對線上教學駕輕就熟了&#xff0c;但對于線上教學來說&#xff0c;合適的教學支持工具始終是必不可少的。不論是文科教師&#xff0c;還是理科教師&#xff0c;對于真…

一道多線程通信實例分析

程序如下&#xff1a; 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public static void main(String[] args) throws Exception{ final List list new ArrayList(); final Object lock new Object(); Thread t1 …