Python3中常用模塊-datetime模塊

目錄

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
"""

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章