目錄
1:獲取模塊幫助文檔
2:datetime模塊中定義的類
2.1:datetime.date類
2.1.1:datetime.date類的定義
2.1.2:datetime.date類方法和屬性:
2.1.3:datetime.date對象方法和屬性:
2.1.4:datetime.date使用實例:
2.2:datetime.time類
2.2.1:time類的定義
2.2.2:time類方法和屬性
2.2.3:time類對象方法和屬性
2.2.4:datetime.time使用實例:
2.3:datetime.datetime類
2.3.1:datetime.datetime類的定義
2.3.2:datetime.datetime類方法和屬性
2.3.3:datetime.datetime對象方法和屬性
2.3.4:datetime.datetime使用實例:
2.3.5:格式化字符串與時間戳轉換:
2.4:datetime.timedelta類
2.4.1:datetime.timedelta類的定義
2.4.2:datetime.timedelta類屬性
2.4.3:datetime.timedelta實例方法和屬性
2.4.4:datetime.timedelta使用實例:
3:時間運算
datetime模塊提供了處理日期和時間的類,既有簡單的方式,又有複雜的方式。它雖然支持日期和時間算法,但其實現的重點是爲輸出格式化和操作提供高效的屬性提取功能。(可以理解爲對time模塊的進一步封裝,裏面的時間獲取,轉換還是使用time模塊中的函數)
1:獲取模塊幫助文檔
import datetime
print(datetime.__doc__)
print(dir(datetime))
for item in dir(datetime):
print(item)
print(help(datetime.date))
print(help(datetime.time))
print(help(datetime.datetime))
print(help(datetime.timedelta))
2:datetime模塊中定義的類
datetime模塊定義了以下幾個類:
類名稱 |
描述 |
---|
datetime.date |
表示日期,常用的屬性有:year, month和day;只處理年月日這種日期時間,不能處理時分秒。表示對象是哪年,哪月,哪天,星期幾等等。 |
datetime.time |
表示時間,常用屬性有:hour, minute, second, microsecond;表示對象是哪時哪分哪秒; |
datetime.datetime |
表示日期時間,datetime.date + datetime.time |
datetime.timedelta |
時間增量,表示對象有多少時,秒,微秒;表示兩個date、time、datetime實例之間的時間間隔,分辨率(最小單位)可達到微秒,可與date、time、datetime實例進行相加,以表示多少時,秒,微秒之前或之後。 |
datetime.tzinfo |
時區相關信息對象的抽象基類。它們由datetime和time類使用,以提供自定義時間的而調整。 |
datetime.timezone |
Python 3.2中新增的功能,實現tzinfo抽象基類的類,表示與UTC的固定偏移量 |
datetime模塊中定義的常量:
常量名稱 |
描述 |
---|
datetime.MINYEAR |
datetime.date或datetime.datetime對象所允許的年份的最小值,值爲1 |
datetime.MAXYEAR |
datetime.date或datetime.datetime對象所允許的年份的最大值,只爲9999 |
2.1:datetime.date類
2.1.1:datetime.date類的定義
class datetime.date(year, month, day)
year, month 和 day都是是必須參數,各參數的取值範圍爲:
參數名稱 |
取值範圍 |
---|
year |
[MINYEAR, MAXYEAR] |
month |
[1, 12] |
day |
[1, 指定年份的月份中的天數] |
2.1.2:datetime.date類方法和屬性:
類方法/屬性名稱 |
描述 |
---|
date.max |
date對象所能表示的最大日期:9999-12-31 |
date.min |
date對象所能表示的最小日誌:00001-01-01 |
date.resolution |
date對象表示的日期的最小單位:天 |
date.today() |
返回一個表示當前本地日期的date對象 |
date.fromtimestamp(timestamp) |
根據跟定的時間戳,返回一個date對象 |
2.1.3:datetime.date對象方法和屬性:
對象方法/屬性名稱 |
描述 |
---|
d.year |
年 |
d.month |
月 |
d.day |
日 |
d.replace(year[, month[, day]]) |
生成並返回一個新的日期對象,原日期對象不變 |
d.timetuple() |
返回日期對應的time.struct_time對象 |
d.toordinal() |
返回日期是是自 0001-01-01 開始的第多少天 |
d.weekday() |
返回日期是星期幾,[0, 6],0表示星期一 |
d.isoweekday() |
返回日期是星期幾,[1, 7], 1表示星期一 |
d.isocalendar() |
返回一個元組,格式爲:(year, week number, isoweekday) |
d.isoformat() |
返回‘YYYY-MM-DD’格式的日期字符串 |
d.strftime(format) |
返回指定格式的日期字符串,與time模塊的strftime(format, struct_time)功能相同 |
2.1.4:datetime.date使用實例:
from datetime import date
print(date.max) # 9999-12-31
print(date.min) # 0001-01-01
print(date.resolution) # 1 day, 0:00:00
print(date.today()) # 2020-05-31, 裏面就是調用:fromtimestamp(time.time())
print(date.fromtimestamp(1570911914)) # 2019-10-13
print('*'*50)
# 創建date對象
#1: 使用構造函數
d = date(2010,10,15)
#2: 當天
# d = date.today()
#3:使用時間戳
# d = date.fromtimestamp(1570911914)
print(d.year) # 2010
print(d.month) # 10
print(d.day) # 15
# 生成新的date對象,原來的對象不變
print(d.replace(2018)) # 2018-10-15
print(d.replace(2018,8)) # 2018-08-15
print(d.replace(2018,8,18)) # 2018-08-18
print(d.year) # 2010
print(d.month) # 10
print(d.day) # 15
print(d.timetuple()) # 返回結構化時間
print(d.toordinal()) # 734060 ,返回日期是是自 0001-01-01 開始的第多少天
print(d.weekday()) # 4 返回日期是星期幾,[0, 6],0表示星期一
print(d.isoweekday()) # 5 返回日期是星期幾,[1, 7], 1表示星期一
print(d.isocalendar()) # (2010, 41, 5) 返回一個元組,格式爲:(year, week number, isoweekday)
print(d.isoformat()) # 2010-10-15 返回‘YYYY-MM-DD’格式的日期字符串
print(d.strftime("%Y-%m-%d %H:%M:%S")) # 2010-10-15 00:00:00
2.2:datetime.time類
2.2.1:time類的定義
class datetime.time(hour, [minute[, second, [microsecond[, tzinfo]]]])
hour爲必須參數,其他爲可選參數。各參數的取值範圍爲:
參數名稱 |
取值範圍 |
---|
hour |
[0, 23] |
minute |
[0, 59] |
second |
[0, 59] |
microsecond |
[0, 1000000] |
tzinfo |
tzinfo的子類對象,如timezone類的實例 |
2.2.2:time類方法和屬性
類方法/屬性名稱 |
描述 |
---|
time.max |
time類所能表示的最大時間:time(23, 59, 59, 999999) |
time.min |
time類所能表示的最小時間:time(0, 0, 0, 0) |
time.resolution |
時間的最小單位,即兩個不同時間的最小差值:1微秒 |
2.2.3:time類對象方法和屬性
對象方法/屬性名稱 |
描述 |
---|
t.hour |
時 |
t.minute |
分 |
t.second |
秒 |
t.microsecond |
微秒 |
t.tzinfo |
返回傳遞給time構造方法的tzinfo對象,如果該參數未給出,則返回None |
t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]]) |
生成並返回一個新的時間對象,原時間對象不變 |
t.isoformat() |
返回一個‘HH:MM:SS.%f’格式的時間字符串 |
t.strftime() |
返回指定格式的時間字符串,與time模塊的strftime(format, struct_time)功能相同 |
2.2.4:datetime.time使用實例:
import datetime
print(datetime.time.max) # 23:59:59.999999
print(datetime.time.min) # 00:00:00
print(datetime.time.resolution) # 0:00:00.000001 1微秒
# 創建datetime.time對象
t = datetime.time(20,15,38,999999)
print(t.hour) # 20
print(t.minute) #15
print(t.second) # 38
print(t.microsecond) # 999999
print(t.tzinfo) # None
print(t.replace(21)) # 創建新的datetime.time對象; 21:15:38.999999
print(t.replace(21,11)) # 21:11:38.999999
print(t.replace(21,11,15)) # 21:11:15.999999
print(t.replace(21,11,15,6666)) # 21:11:15.006666
print(t.isoformat()) # 20:15:38.999999
print(t.strftime("%Y-%m-%d %H:%M:%S")) # 1900-01-01 20:15:38
2.3:datetime.datetime類
2.3.1:datetime.datetime類的定義
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
year, month 和 day是必須要傳遞的參數, tzinfo可以是None或tzinfo子類的實例。
各參數的取值範圍爲:
參數名稱 |
取值範圍 |
---|
year |
[MINYEAR, MAXYEAR] |
month |
[1, 12] |
day |
[1, 指定年份的月份中的天數] |
hour |
[0, 23] |
minute |
[0, 59] |
second |
[0, 59] |
microsecond |
[0, 1000000] |
tzinfo |
tzinfo的子類對象,如timezone類的實例 |
2.3.2:datetime.datetime類方法和屬性
類方法/屬性名稱 |
描述 |
---|
datetime.today() |
返回一個表示當前本期日期時間的datetime對象 |
datetime.now([tz]) |
返回指定時區日期時間的datetime對象,如果不指定tz參數則結果同上 |
datetime.utcnow() |
返回當前utc日期時間的datetime對象 |
datetime.fromtimestamp(timestamp[, tz]) |
根據指定的時間戳創建一個datetime對象 |
datetime.utcfromtimestamp(timestamp) |
根據指定的時間戳創建一個datetime對象 |
datetime.combine(date, time) |
把指定的date和time對象整合成一個datetime對象 |
datetime.strptime(date_str, format) |
將時間字符串轉換爲datetime對象 |
2.3.3:datetime.datetime對象方法和屬性
對象方法/屬性名稱 |
描述 |
---|
dt.year, dt.month, dt.day |
年、月、日 |
dt.hour, dt.minute, dt.second |
時、分、秒 |
dt.microsecond, dt.tzinfo |
微秒、時區信息 |
dt.date() |
獲取datetime對象對應的date對象 |
dt.time() |
獲取datetime對象對應的time對象, tzinfo 爲None |
dt.timetz() |
獲取datetime對象對應的time對象,tzinfo與datetime對象的tzinfo相同 |
dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) |
生成並返回一個新的datetime對象,如果所有參數都沒有指定,則返回一個與原datetime對象相同的對象 |
dt.timetuple() |
返回datetime對象對應的tuple(不包括tzinfo) |
dt.utctimetuple() |
返回datetime對象對應的utc時間的tuple(不包括tzinfo) |
dt.toordinal() |
同date對象 |
dt.weekday() |
同date對象 |
dt.isocalendar() |
同date獨享 |
dt.isoformat([sep]) |
返回一個‘%Y-%m-%d |
dt.ctime() |
等價於time模塊的time.ctime(time.mktime(d.timetuple())) |
dt.strftime(format) |
返回指定格式的時間字符串 |
2.3.4:datetime.datetime使用實例:
from datetime import datetime,date,time,timezone
# 創建 datetime對象
print(datetime.today()) # 2020-05-31 20:32:39.199002
print(datetime.now()) # 2020-05-31 20:32:39.199002
print(datetime.now(timezone.utc)) # 2020-05-31 12:32:39.199002+00:00
print(datetime.utcnow()) # 2020-05-31 12:32:39.199002
# 從時間戳創建
print(datetime.fromtimestamp(1590911914)) # 2020-05-31 15:58:34
print(datetime.fromtimestamp(1590911914,timezone.utc)) # 2020-05-31 07:58:34+00:00
print(datetime.utcfromtimestamp(1590911914)) # 2020-05-31 07:58:34
print(datetime.combine( date(2010,10,15),time(11,47,46))) # 2010-10-15 11:47:46
# 從時間字符串創建
print(datetime.strptime("2020-05-31 20:37:12", "%Y-%m-%d %H:%M:%S")) # 2020-05-31 20:37:12
print('*'*60)
# datetime對象屬性及方法
dt = datetime.strptime("2020-05-31 20:37:12", "%Y-%m-%d %H:%M:%S")
print(dt.year, dt.month, dt.day) # 2020 5 31
print(dt.hour, dt.minute, dt.second) # 20 37 12
print(dt.microsecond, dt.tzinfo) # 0 None
print(dt.date()) # 2020-05-31
print(dt.time()) # 20:37:12
print(dt.timetz()) # 20:37:12
print('*'*60)
# print(dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]))
print(dt.replace(2019)) # 創建新的datetime對象
print(dt.timetuple()) # 結構化時間 time.struct_time(tm_year=2020, tm_mon=5, tm_mday=31, tm_hour=20, tm_min=37, tm_sec=12, tm_wday=6, tm_yday=152, tm_isdst=-1)
print(dt.utctimetuple()) # 結構化時間 time.struct_time(tm_year=2020, tm_mon=5, tm_mday=31, tm_hour=20, tm_min=37, tm_sec=12, tm_wday=6, tm_yday=152, tm_isdst=0)
print(dt.toordinal()) # 737576 返回日期是是自 0001-01-01 開始的第多少天
print(dt.weekday()) # 6 返回日期是星期幾,[0, 6],0表示星期一
print(dt.isocalendar()) # (2020, 22, 7) 返回一個元組,格式爲:(year, week number, isoweekday)
print(dt.isoformat(sep=' ')) # 2020-05-31 20:37:12
print(dt.ctime()) # Sun May 31 20:37:12 2020
print(dt.strftime("%Y-%m-%d %H:%M:%S")) # 2020-05-31 20:37:12
print(dt.strftime("%Y-%m-%d %H")) # 2020-05-31 20
print(dt.timestamp() ) # 1590928632
2.3.5:格式化字符串與時間戳轉換:
from datetime import datetime
# 轉換
# 時間戳-->格式化字符串
dt = datetime.fromtimestamp(1590928632)
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
# 格式化字符串-->時間戳
dt = datetime.strptime("2020-05-31 20:37:12", "%Y-%m-%d %H:%M:%S")
print(dt.timestamp() )
2.4:datetime.timedelta類
2.4.1:datetime.timedelta類的定義
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
2.4.2:datetime.timedelta類屬性
類屬性名稱 |
描述 |
---|
timedelta.min |
timedelta(-999999999) |
timedelta.max |
timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) |
timedelta.resolution |
timedelta(microseconds=1) |
2.4.3:datetime.timedelta實例方法和屬性
實例方法/屬性名稱 |
描述 |
---|
td.days |
天 [-999999999, 999999999] |
td.seconds |
秒 [0, 86399] |
td.microseconds |
微秒 [0, 999999] |
td.total_seconds() |
時間差中包含的總秒數,等價於: td / timedelta(seconds=1) |
2.4.4:datetime.timedelta使用實例:
import datetime
print(datetime.timedelta.max) # 999999999 days, 23:59:59.999999
print(datetime.timedelta.min) # -999999999 days, 0:00:00
print(datetime.timedelta.resolution) # 0:00:00.000001
print('*'*60)
td = datetime.timedelta(1,20,15,88)
print(td.days) # 1
print(td.seconds) # 20
print(td.microseconds) # 88015
print(td.total_seconds()) # 86420.088015
3:時間運算
import datetime
dt = datetime.datetime.now()
print('1:',dt)
# 1: 時間相加: 查看datetime.datetime的源代碼可知:datetime 只能與timedelta相加; datetime與datetime相加沒有任何意義
"""
def __add__(self, other):
"Add a datetime and a timedelta."
"""
# 5天前
print('2:',dt + datetime.timedelta(days=-5))
# 5天又10小時前
print('3:',dt + datetime.timedelta(days=-5,hours=-10))
# 5天后
print('4:',dt + datetime.timedelta(days=5))
print('*'*60)
# 2: 時間相減:a:兩個datetimes相減;b:datetime與timedelta相減
"""
def __sub__(self, other):
"Subtract two datetimes, or a datetime and a timedelta."
"""
dt = datetime.datetime.now()
print('6:',dt)
# 5天前
print('7:',dt - datetime.timedelta(days=5))
dt2= datetime.datetime.strptime("2020-05-30 20:37:12", "%Y-%m-%d %H:%M:%S")
print('8:dt - dt2:',dt - dt2)
print('9:dt2 - dt:',dt2 - dt)
"""
1: 2020-06-01 23:09:13.429108
2: 2020-05-27 23:09:13.429108
3: 2020-05-27 13:09:13.429108
4: 2020-06-06 23:09:13.429108
************************************************************
6: 2020-06-01 23:09:13.429108
7: 2020-05-27 23:09:13.429108
8:dt - dt2: 2 days, 2:32:01.429108
9:dt2 - dt: -3 days, 21:27:58.570892
"""