主頁 > 後端開發 > Python標準庫:datetime 時間和日期模塊 —— 時間的獲取和操作詳解

Python標準庫:datetime 時間和日期模塊 —— 時間的獲取和操作詳解

2021-08-04 07:51:46 後端開發

datetime 時間和日期模塊

datetime 模塊提供了以簡單和復雜的方式操作日期和時間的類,雖然支持日期和時間演算法,但實作的重點是有效的成員提取以進行輸出格式化和操作,該模塊還支持可感知時區的物件,
本文主要介紹datetime庫的一些基本的使用方法,


timestamp:時間戳,指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數

utc:世界協調時間(Universal Time Coordinated,UTC)
GPS 系統中有兩種時間區分,一為UTC,另一為LT(地方時),兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時,以此計算即可,

文章目錄

  • datetime 時間和日期模塊
  • 1. 常用用法
    • 1.1 datetime.date
    • 1.2 datetime.time
    • 1.3 datetime.datetime
    • 1.4 datetime.timedelta
    • 1.5 datetime.timezone
  • 2. 模塊內格式字符的含義一覽表
  • 結束語

1. 常用用法

datetime庫中定義的幾個類:

類名稱描述常用屬性
datetime.date表示日期year, month, day
datetime.time表示時間hour, minute, second, microsecond
datetime.datetime表示日期和時間year, month, day, hour, minute, microsecond
datetime.timedelta表示兩個日期時間之間的差days, hours, seconds
datetime.tzinfo描述時區資訊物件的抽象基類上網查找
datetime.timezone時區,表示與UTC的固定偏移量datetime.timedelta物件

匯入:

import datetime as datet
from datetime import date, time, datetime, timedelta, timezone

常量:

常量描述
datetime.MINYEARdate 或 datetime 物件允許的最小年份1
datetime.MAXYEARdate 或 datetime 物件允許最大的年份9999

1.1 datetime.date

date 物件代表一個理想化歷法中的日期(年、月和日),即當今的格列高利歷向前后兩個方向無限延伸,

from datetime import date

實體化一個date物件:

d = date(year=2021,month=1,day=1)	#一種方法
d = date(2021,1,1)	#更簡單一些

date類的方法和屬性:

方法和屬性描述
date.maxdate類所能表示的最大日期
date.mindate類所能表示的最小日期
date.resolution日期的最小單位,即兩個不同日期的最小差值,回傳timedelta物件
date.today()獲取今天的日期
date.fromtimestamp(timestamp)用時間戳獲取日期
date.fromisoformat(‘xxxx-xx-xx’)將特定格式日期字串轉換為date物件
date.fromisocalendar(year,week,weekday)以年、一年中第幾個星期、星期幾獲取日期
date.fromordinal(int)用0001-01-01至該日期的天數獲取日期

date物件的方法和屬性:

方法和屬性描述
d.year獲取年
d.month獲取月
d.day獲取日
d.weekday()獲取該日期是星期幾,范圍0~6,0表示星期一
d.isoweekday()獲取該日期是星期幾,范圍1~7,1表示星期一
d.replace(year[,month[,day]])生成并回傳一個新的日期物件,原日期物件不變
d.ctime()回傳一個表示日期的字串
d.isoformat()回傳該日期的’xxxx-xx-xx’字串格式
d.isocalendar()回傳該日期的(year,week,weekday)元組格式
d.timetuple()回傳該日期對應的time.struct_time物件
d.toordinal()回傳從0001-01-01至該日期的天數
d.strftime(format)回傳指定格式的日期字串

示例:

>>> from datetime import date	#匯入date模塊

>>> import time
>>> stamptime = time.time()		#匯入time庫獲取時間戳

>>> date.today()	#獲取當天時間
datetime.date(2021, 6, 26)
>>> date.max	#獲取date類所能表示的最大日期
datetime.date(9999, 12, 31)
>>> date.min	#獲取date類所能表示的最小日期
datetime.date(1, 1, 1)
>>> date.resolution	#獲取日期間隔的最小單位
datetime.timedelta(days=1)
>>> date.fromtimestamp(time.time())	#用時間戳獲取日期
datetime.date(2021, 6, 26)
>>> date.fromisoformat('2021-01-01')	#用'xxxx-xx-xx'格式字串獲取日期
datetime.date(2021, 1, 1)
>>> date.fromisocalendar(2020,1,3)	#以年、一年中第幾個星期、星期幾獲取日期
datetime.date(2020, 1, 1)
>>> date.fromordinal(737425)	#用0001-01-01至該日期的天數獲取日期
datetime.date(2020, 1, 1)

>>> d = date(2020,1,1)	#生成日期
>>> d
datetime.date(2020, 1, 1)
>>> print(d)	#注意列印出來的日期會自動安排格式
2020-01-01
>>> d.year	#獲取年
2020
>>> d.month	#獲取月
1
>>> d.day	#獲取日
1
>>> d.replace(1949,10,1)	#生成并回傳一個新的日期物件,原日期物件不變
datetime.date(1949, 10, 1)
>>> d	#原日期物件不變
datetime.date(2020, 1, 1)
>>> d.ctime()	#回傳一個表示日期的字串
'Wed Jan  1 00:00:00 2020'
>>> d.weekday()	#對應星期幾,范圍0~6
2
>>> d.isoweekday()	#對應星期幾,范圍1~7
3
>>> d.isoformat()	#回傳該日期的'xxxx-xx-xx'字串格式
'2020-01-01'
>>> d.isocalendar()	#回傳該日期的(year,week,weekday)元組格式
(2020, 1, 3)
>>> d.timetuple()	#回傳該日期對應的time.struct_time物件
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=1, tm_isdst=-1)
>>> d.toordinal()	#回傳從0001-01-01至該日期的天數
737425
>>> d.strftime('date:%Y/%m/%d')	#回傳指定格式的日期字串,其中可放置字串和模塊內其他格式字符(見文末),好像不能有中文
'date:2020/01/01'


1.2 datetime.time

一個 time 物件代表某日的(本地)時間,它獨立于任何特定日期,并可通過 tzinfo 物件來調整,

import datetime as datet
from datetime import time, timedelta, timezone

實體化一個time物件:

t = time(hour=12,minute=30,second=55,tzinfo=timezone.utc)	#制定時區實體化一個time物件,tzinfo可選
t = time(12,30,55)	#簡略一些

time類的方法和屬性:

方法和屬性描述
time.maxtime類所能表示的最大時間
time.mintime類所能表示的最小時間
time.resolution時間的最小單位,即兩個不同時間的最小差值,回傳timedelta物件
time.fromisoformat(xx:xx:xx)將特定格式時間字串轉換為time物件

time物件的方法和屬性:

方法和屬性描述
t.hour獲取時
t.minute獲取分
t.second獲取秒
t.microsecond獲取微秒
t.tzinfo獲取時區資訊
t.tzname()獲取時區名稱
t.utcoffset()獲取與utc時區的時間偏移量,為timedelta物件
t.isoformat()回傳該日期時間的’xx:xx:xx’字串格式,如果該時間相比utc有偏移,即有指定時區,則會附上偏移量,
t.replace([,hour[, minute[, second[, microsecond[, tzinfo]]]]])生成并回傳一個新的time物件,原物件不變
t.strftime(format)回傳指定格式的時間字串

示例:

>>> import datetime as datet		#匯入庫和模塊
>>> from datetime import time, timedelta, timezone

>>> time.max	#time類所能表示的最大時間
datetime.time(23, 59, 59, 999999)
>>> time.min	#time類所能表示的最大時間
datetime.time(0, 0)
>>> time.resolution		#時間的最小單位,即兩個不同時間的最小差值,回傳timedelta物件
datetime.timedelta(microseconds=1)
>>> time.fromisoformat('12:30:55')	#將特定格式時間字串轉換為time物件
datetime.time(12, 30, 55)

>>> t = time(12,30,55,tzinfo=timezone.utc)	#指定時區實體化一個time物件
>>> t
datetime.time(12, 30, 55, tzinfo=datetime.timezone.utc)
>>> print(t)
12:30:55+00:00	#注意列印出來的會自動格式化,如果指定了時區則附上偏移量
>>> t.hour	#獲取時
12
>>> t.minute	#獲取分
30
>>> t.second	#獲取秒
55
>>> t.microsecond	#獲取微秒
0
>>> t.tzinfo	#獲取時區資訊
datetime.timezone.utc
>>> t.tzname()	#獲取時區名稱
'UTC'
>>> t.utcoffset()	#獲取偏移量
datetime.timedelta(0)
>>> t.isoformat()	#用特定格式字串獲取時間
'12:30:55+00:00'
>>> t.replace(9,30)		#生成并回傳一個新的time物件,原物件不變
datetime.time(9, 30, 55, tzinfo=datetime.timezone.utc)
>>> t.strftime('time:%H:%M:%S')	#回傳指定格式的時間字串
'time:12:30:55'


1.3 datetime.datetime

datetime 物件是包含來自 date 物件和 time 物件的所有資訊的單一物件,

import datetime as datet
from datetime import datetime, timezone

實體化一個datetime物件:

dt = datetime(year=2021,month=1,day=1,hour=12,minute=30,second=55)	#實體化
dt = datetime(2021,1,1,12,30,55)	#更加簡單一些
dt = datetime(2021,1,1,12,30,55,tzinfo=timezone.utc)	#指定時區的方法

datetime類的方法和屬性:

方法和屬性描述
datetime.maxdatetime類所能表示的最大日期時間
datetime.mindatetime類所能表示的最小日期時間
datetime.resolution時間的最小單位,即兩個不同時間的最小差值,回傳timedelta物件
datetime.today()獲取當前日期和時間
datetime.now(tz)獲取指定時區的當前日期時間,如果不指定tz引數則結果同上
datetime.utcnow()獲取當前utc日期時間
datetime.fromtimestamp(timestamp[, tz])用時間戳獲取時間
datetime.utcfromtimestamp(timestamp)用時間戳獲取utc時間
datetime.combine(date, time)合并date和time物件
datetime.strptime(‘datetime’,format)將時間字串轉換為datetime物件

datetime物件的方法和屬性:

方法和屬性描述
dt.year獲取年
dt.month獲取月
dt.day獲取日
dt.hour獲取時
dt.minute獲取分
dt.second獲取秒
dt.microsecond獲取微秒
dt.date()獲取datetime物件對應的date物件
dt.time()獲取datetime物件對應的time物件,tzinfo為None
dt.tzinfo獲取時區資訊
dt.tzname()獲取時區名稱
dt.utcoffset()獲取與UTC時區的時間偏移量,為timedelta物件
dt.timetz()獲取datetime物件對應的time物件和tzinfo
dt.ctime()回傳一個表示日期的字串
dt.weekday()獲取該日期是星期幾,范圍0~6,0表示星期一,同date
dt.isoweekday()獲取該日期是星期幾,范圍1~7,1表示星期一,同date
dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])生成并回傳一個新的datetime物件,原物件不變
dt.astimezone(tz)生成并回傳一個新的datetime物件,改變其tzinfo,原物件不變
dt.dst()根據datetime物件的tzinfo,回傳是否夏令時
dt.isoformat(sep,timespec)回傳該日期時間的’xxxx-xx-xx xx:xx:xx’字串格式,sep為日期和時間間的分隔符,默認為T,timespec為時間部分顯示模式選擇(參見示例),如果該時間相比utc有偏移,即有指定時區,則會附上偏移量,
dt.isocalendar()回傳該日期時間的(year,week,weekday)元組格式,同date
dt.timetuple()回傳該日期時間對應的time.struct_time物件(不包括tzinfo)
dt.utctimetuple()回傳該日期時間對應的utc時區time.struct_time物件(不包括tzinfo)
dt.toordinal()回傳從0001-01-01至該日期的天數,同date
dt.strftime(format)回傳指定格式的日期時間字串

示例:

>>> import datetime as datet		#匯入庫和模塊
>>> from datetime import datetime, timezone

>>> datetime.max	#datetime類所能表示的最大日期時間
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
>>> datetime.min	#datetime類所能表示的最小日期時間
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.resolution		#時間的最小單位,即兩個不同時間的最小差值,回傳timedelta物件
datetime.timedelta(microseconds=1)
>>> datetime.today()	#獲取當前日期和時間
datetime.datetime(2021, 6, 27, 8, 2, 19, 708118)
>>> datetime.now()		#獲取當前日期時間
datetime.datetime(2021, 6, 27, 8, 2, 31, 65767)
>>> datetime.now(tz=timezone(timedelta(hours=8)))	#獲取指定時區的當前日期時間
datetime.datetime(2021, 6, 27, 8, 3, 50, 882333, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
>>> datetime.utcnow()	#獲取當前utc日期時間
datetime.datetime(2021, 6, 27, 0, 6, 19, 706845)	#可以看到,utc時間與我們北京時間是差了八個小時的
>>>datetime.fromtimestamp(1624753068.8182602,tz=timezone(timedelta(hours=8)))	#用時間戳獲取時間,指定時區
datetime.datetime(2021, 6, 27, 8, 17, 48, 818260, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
>>> datetime.utcfromtimestamp(1624753068.8182602)	#用時間戳獲取utc時間
datetime.datetime(2021, 6, 27, 0, 17, 48, 818260)	#差了八個小時
>>> datetime.fromisocalendar(2020, 53, 5)	#以年、一年中第幾個星期、星期幾獲取日期
datetime.datetime(2021, 1, 1, 0, 0)
>>> datetime.fromisoformat('2021-01-01T12:30:55')	#用特定格式字串獲取時間,注意日期和時間中間用T連接
datetime.datetime(2021, 1, 1, 12, 30, 55)
>>> datetime.fromordinal(737791)	#用0001-01-01至該日期的天數獲取日期
datetime.datetime(2021, 1, 1, 0, 0)
>>> d = date(2021,1,1)
>>> t = time(12,30,50)
>>> datetime.combine(d,t,tzinfo=timezone(timedelta(hours=8)))	#用combine合并日期和時間,如果不指定時區則使用time的時區
datetime.datetime(2021, 1, 1, 12, 30, 50, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
>>> datetime.strptime('date:2021-01-01,time:12:30:50','date:%Y-%m-%d,time:%H:%M:%S')	#字串轉時間
datetime.datetime(2021, 1, 1, 12, 30, 50)

>>> dt = datetime(2021,1,1,12,30,55,tzinfo=timezone.utc)	#帶時區實體化一個datetime
>>> dt
datetime.datetime(2021, 1, 1, 12, 30, 55, tzinfo=datetime.timezone.utc)
>>> print(dt)
2021-01-01 12:30:55+00:00	#注意列印出來的會自動格式化,如果指定了時區則附上偏移量
>>> dt.year		#以下是獲取年、月、日、時、分、秒、微秒
2021
>>> dt.month
1
>>> dt.day
1
>>> dt.hour
12
>>> dt.minute
30
>>> dt.second
55
>>> dt.microsecond
0
>>> dt.date()	#獲取datetime物件對應的date物件
datetime.date(2021, 1, 1)
>>> dt.time()	#獲取datetime物件對應的time物件
datetime.time(12, 30, 55)
>>> dt.tzinfo	#獲取時區資訊
datetime.timezone.utc
>>> dt.tzname()	#獲取時區名稱
'UTC'
>>> dt2 = datetime(2021,1,1,12,59,59,tzinfo=timezone(timedelta(hours=8),name='Beijing'))	#自定義時區名稱
>>> dt2.tzname()	#獲取時區名稱
'Beijing'
>>> dt2.utcoffset()		#獲取偏移量
datetime.timedelta(seconds=28800)
>>> dt.timetz()		#獲取datetime物件對應的time物件和tzinfo
datetime.time(12, 30, 55, tzinfo=datetime.timezone.utc)
>>> dt.ctime()
'Fri Jan  1 12:30:55 2021'
>>> dt.weekday()	#獲取該日期是星期幾,范圍0~6,0表示星期一,同date
4
>>> dt.isoweekday()	#獲取該日期是星期幾,范圍1~7,1表示星期一,同date
5
>>> dt.replace(1949,10,1)	#生成并回傳一個新的datetime物件,原物件不變
datetime.datetime(1949, 10, 1, 12, 30, 55, tzinfo=datetime.timezone.utc)
>>> dt.astimezone(tz=timezone(timedelta(hours=8)))	#生成并回傳一個新的datetime物件,改變其tzinfo,原物件不變
datetime.datetime(2021, 1, 1, 20, 30, 55, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
>>> dt.isoformat()	#回傳該日期時間的'xxxx-xx-xx xx:xx:xx'字串格式,sep為日期和時間間的分隔符,默認為T,timespec為時間部分顯示模式選擇
'2021-01-01T12:30:55+00:00'
>>> dt.isoformat(sep=' ',timespec='minutes')	#timespec為時間部分顯示模式選擇,如果該時間相比utc有偏移,即有指定時區,則會附上偏移量,
'2021-01-01 12:30+00:00'
'''
timespec引數及其format
auto:根據time物件的時間內容,自動選擇模式
hours:HH
minutes:HH:MM
seconds:HH:MM:SS
microseconds:HH:MM:SS.ffff
milliseconds:HH:MM:SS.sss
注:除了milliseconds,其他模式,如果出現了時間偏移量offsetime,則需要加上偏移量
'''
>>> dt.isocalendar()	#回傳該日期時間的(year,week,weekday)元組格式,同date
(2020, 53, 5)
>>> dt.timetuple()	#回傳該日期時間對應的time.struct_time物件(不包括tzinfo)
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=30, tm_sec=55, tm_wday=4, tm_yday=1, tm_isdst=-1)
>>> dt.utctimetuple()	#回傳該日期時間對應的utc時區time.struct_time物件(不包括tzinfo)
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=30, tm_sec=55, tm_wday=4, tm_yday=1, tm_isdst=0)
>>> dt.toordinal()	#回傳從0001-01-01至該日期的天數,同date
737791
>>> dt.strftime('date:%Y-%m-%d,time:%H:%M:%S')	#回傳指定格式的日期字串,其中可放置字串和模塊內其他格式字符(見文末),好像不能有中文
'date:2021-01-01,time:12:30:55'


1.4 datetime.timedelta

timedelta 物件表示兩個 date 或者 time 的時間間隔,

import datetime as datet
from datetime import date, time, datetime, timedelta, timezone

timedelta 類的引數:

引數含義
days
seconds
microseconds微秒
milliseconds毫秒
minutes分鐘
hours小時
weeks

所有引數都可選,可為int、float和正數、負數,內部值只存盤days、seconds 和 microseconds,因此其他所有引數的單位都會被轉換:

  • 1毫秒 轉換為 1000微秒: 1milliseconds = 1000microseconds

  • 1分鐘 轉換為 60秒: 1minutes = 60seconds

  • 1小時 轉換為 3600秒: 1hours = 3600seconds

  • 1星期 轉換為 7天: 1weeks = 7days

實體化一個timedelta物件:

delta = timedelta(days=10,seconds=5,microseconds=5555,minutes=30,hours=12,weeks=2)

timedelta類的方法和屬性:

方法和屬性描述
timedelta.maxtimedelta類所能表示的最大時間間隔
timedelta.mintimedleta類所能表示的最小時間間隔
timedelta.resolutiontimedelta類所能表示的時間間隔的最小單位

timedelta物件的方法和屬性:

方法和屬性描述
delta.days獲取timedelta物件經過單位換算后的總天數
delta.seconds獲取timedelta物件經過單位換算后的總秒數
delta.microseconds獲取timedelta物件經過單位換算后的總微秒數
delta.total_seconds()獲取timedelta物件包含的總秒數

使用timedelta物件可以對日期、時間進行求差、加減、比較等操作,
示例:

>>> import datetime as datet
>>> from datetime import datetime, timedelta

>>> timedelta.max	#timedelta類所能表示的最大時間間隔	
datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
>>> timedelta.min	#timedleta類所能表示的最小時間間隔
datetime.timedelta(days=-999999999)
>>> timedelta.resolution	#timedelta類所能表示的時間間隔的最小單位
datetime.timedelta(microseconds=1)
>>> delta = timedelta(days=10,seconds=5,microseconds=5555,minutes=30,hours=12,weeks=2)	#實體化一個timedelta物件
>>> delta
datetime.timedelta(days=24, seconds=45005, microseconds=5555)
>>> print(delta)	#注意列印出來的會自動格式化
24 days, 12:30:05.005555
>>> delta.days	#獲取timedelta物件經過單位換算后的總天數
24
>>> delta.seconds	#獲取timedelta物件經過單位換算后的總秒數
45005
>>> delta.microseconds	#獲取timedelta物件經過單位換算后的總微秒數
5555
>>> delta.total_seconds()	#獲取timedelta物件包含的總秒數
2118605.005555

>>> dt1 = datetime(2021,1,1,12,30,55)
>>> dt2 = datetime(2020,1,1,9,30,00)
>>> dt1 - dt2	#大減小
datetime.timedelta(days=366, seconds=10855)
>>> dt2 - dt1	#小減大
datetime.timedelta(days=-367, seconds=75545)
#以上方法求兩個時間的差值

>>> dt1 + timedelta(seconds=5)		#5秒后
datetime.datetime(2021, 1, 1, 12, 31)
>>> dt1 - timedelta(seconds=5)		#5秒前,第一種方法:直接減去timedelta物件
datetime.datetime(2021, 1, 1, 12, 30, 50)
>>> dt1 + timedelta(seconds=-5)		#5秒前,第二種方法:tamedelta物件引數設為正、負數以加減
datetime.datetime(2021, 1, 1, 12, 30, 50)
#以上方法可將時間向前、向后延遲

>>> (dt1 - dt2).total_seconds()		#計算時間差總秒數
31633255.0

>>> dt1>dt2
True
>>> dt1<dt2
False
>>> dt1 == dt2
False
#比較大小

拓展:計算時間差,單位:天、時、分,
有時我們需要計算時間差,但是timedelta物件中只包含days、seconds、microseconds三種屬性,并不能滿足我們的需要,于是可以寫一個函式,傳入兩個datetime物件,計算其天、時、分的差值:

def delta(start,end):
    days = 0
    hours = 0
    minutes = 0
    delta = end-start
    minutes = int(delta.total_seconds() // 60)
    if minutes >= 60:
        hours = int(minutes // 60)
        minutes = minutes - 60 * hours
        if hours >= 24:
            days = int(hours // 24)
            hours = hours - 24 * days
    text = str(days) + '天' if days else ''
    text = text + str(hours) + '時' if hours else text
    text = text + str(minutes) + '分' if minutes else text

    return text

效果:

dt1 = datetime(2021,1,1,9,30,20)
dt2 = datetime(2021,6,15,12,30,20)
print(delta(dt1,dt2))	#執行函式
>>> 
=================== RESTART: D:\Python\Files\delta.py ==================
1653

1.5 datetime.timezone

import datetime as datet
from datetime import datetime, timedelta, timezone

timezone類的引數:

引數描述
offsettimedelta型別,表示與UTC時區的時間間隔,范圍:-timedelta(hours=24)至timedelta(hours=24)
name可選引數,字串型別,設定該時區名稱,可以被datetime物件通過實體方法tzname()獲取

timezone類的屬性:

屬性描述
timezone.utc表示utc時區,即timezone(timedelta(hours=0))

使用示例:

>>> import datetime as datet
>>> from datetime import datetime, timedelta, timezone

>>> datetime(2021,1,1,12,30,50,tzinfo=timezone.utc)
datetime.datetime(2021, 1, 1, 12, 30, 50, tzinfo=datetime.timezone.utc)
>>> datetime(2021,1,1,12,30,50,tzinfo=timezone(timedelta(hours=8)))
datetime.datetime(2021, 1, 1, 12, 30, 50, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))	#北京時間

>>> dt = datetime(2021,1,1,12,59,59,tzinfo=timezone.utc)	#utc時區
>>> dt.tzinfo	#獲取時區資訊
datetime.timezone.utc
>>> dt.tzname()	#獲取時區名稱
'UTC'
>>> dt.utcoffset()	#獲取偏移量
datetime.timedelta(0)

>>> dt2 = datetime(2021,1,1,12,59,59,tzinfo=timezone(timedelta(hours=8),name='Beijing'))	#自定義時區名稱
>>> dt2.tzinfo		#獲取時區資訊
datetime.timezone(datetime.timedelta(seconds=28800), 'Beijing')
>>> dt2.tzname()	#獲取時區名稱
'Beijing'
>>> dt2.utcoffset()		#獲取偏移量
datetime.timedelta(seconds=28800)


2. 模塊內格式字符的含義一覽表

字符描述
%a星期的簡寫,如星期三為Wed
%A星期的全寫,如星期三為Wednesday
%b月份的簡寫,如4月為Apr
%B月份的全寫,如4月為April
%c日期時間的字串表示,如: 04/07/10 10:43:39
%d日在這個月中的天數
%f微秒(范圍:0至999999)
%H小時(24小時制,范圍:0至 23)
%I小時(12小時制,范圍:0至 11)
%j日在年中的天數,范圍:001至366
%m月份,范圍:01至12
%M分鐘,范圍:00至59
%pAM或者PM
%S秒,范圍:00至61
%U周在當年的周數,星期天為周的第一天
%w今天在這周的天數,范圍:0至6,6表示星期天
%W周在當年的周數,星期一作為周的第一天
%x日期字串,如:04/07/10
%X時間字串,如:10:43:39
%y2位數表示的年份
%Y4位數表示的年份
%z與utc時間的間隔 (如果是本地時間,回傳空字串)
%Z時區名稱(如果是本地時間,回傳空字串)
%%轉義,%不變

結束語

datetime庫功能全面,在其常用模塊中,基本上只需要datetime.datetime模塊便能滿足日常需求,
以上便是我分享的全部內容,如果對你有用,點個贊加個收藏再走吧,也歡迎各位給我提出補充和意見!

本文收錄于專欄:Python學習筆記
關注作者,持續閱讀,學習更多Python知識!
https://blog.csdn.net/weixin_52132159


2021/8/1

推薦閱讀

  • Python爬蟲 | 爬取b站北京奧運會開幕式彈幕,有多少人從東京奧運會跑過來的?
  • 絕密!Python爬蟲告訴你刷分機器人背后的原理!這篇文章差點沒過審
  • Python每天一道題:昆蟲繁殖問題?我把密密麻麻的幼蟲和成蟲搞定了
  • Python爬蟲從0到1 | 入門實戰:360翻譯 ——requests庫之POST方法(新手必看,保姆級別教學)
  • 沒想到我連五年級的題目都解不出來?可不能被人小看,讓萬能的Python登場
  • Python:程式猿怎么追女生?教你短短幾行代碼表白,告別表白尷尬!
  • 想學Python不知從何入手?學習Python必備秘籍,附地址,速拿!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291650.html

標籤:python

上一篇:如何使用pycharm的外部檔案docs.python.org功能跳轉到中文站點

下一篇:python小爬蟲-28行代碼實作圖形化在線翻譯

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more