一、時間的幾種格式:
1、時間戳(timestamp)
從1970年1月1日0點開始,到現在的秒數(以格林尼治時間為准)。
數據類型為'float',浮點數,小數
print(time.time()) # 返回的單位是秒不是毫秒 print(type(time.time()))

2、時間元組(Time tuple(time obj))
這是把年月日時分秒周日……作為一個元組
數據類型為‘time.struct_time’,元組
print(time.localtime()) print(type(time.localtime())) print('年:', time.localtime()[0]) print('月:', time.localtime()[1]) print('日:', time.localtime()[2]) print('時:', time.localtime()[3]) print('分:', time.localtime()[4]) print('秒:', time.localtime()[5]) print('周幾:', time.localtime()[6]) # 0到6,0代表周一 print('第幾天:', time.localtime()[7]) print('夏令營:', time.localtime()[8]) print('-----------------------------') print('年:', time.localtime().tm_year) print('月:', time.localtime().tm_mon) print('日:', time.localtime().tm_mday) print('時:', time.localtime().tm_hour) print('分:', time.localtime().tm_min) print('秒:', time.localtime().tm_sec) print('周幾:', time.localtime().tm_wday) print('第幾天:', time.localtime().tm_yday) print('夏令營:', time.localtime().tm_isdst)

3、時間格式(Datetime obj)
最准確的時間格式,還帶毫秒
類型為'datetime.datetime'
print(datetime.datetime.now()) print(type(datetime.datetime.now()))

4、時間字符串(string),就是字符串而已
time.strftime(fmt, [tupletime]):接收以時間元組,並返回以可讀字符串表示的時間,格式由fmt決定。
數據類型為‘str’,字符串
print(time.strftime('%Y%m%d%H%M%S'))

% 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)
% 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 當前時區的名稱
% % % 號本身
5、總結
# 時間字符串,就是一個字符串,不方便進行計算,首先棄用。
# 時間戳,是個浮點數,也不方便進行計算,也棄用。
# 時間元組,是個元組,不能直接存入數據庫,還是棄用。
# 時間格式,這是最基本的格式,優先選用。
# time模塊,是以時間戳為基礎的。
# datetime模塊,是以時間格式為基礎的。
二、time模塊
time模塊中時間表現的形式主要有三種:
- timestamp:時間戳,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量
- struct_time:時間元組,共有九個元素
- format_time:格式化時間,已格式化的結構使時間更具可讀性,包括自動化格式和固定格式
1、時間格式轉換圖:
2、生成時間戳timestamp
import time print(time.time())

3、生成時間元組struct_time
import time print(time.localtime())

4、時間戳轉換為時間元組
# 本地時間
import time print(time.localtime(time.time())) print(time.localtime(1556348505))

# 格林威治時間
import time print(time.gmtime(time.time())) print(time.gmtime(1556348505))

5、時間元組轉換為時間戳
import time print(time.mktime(time.localtime())) print(time.mktime(time.localtime(1556348505))) print(time.mktime((2018,5,27,1,5,27,6,147,-1))) # 人造時間元組轉換為時間戳
6、生成格式化時間
import time print(time.strftime("%Y-%m-%d %H:%M:%S")) print(time.strftime("%Y-%m-%d %X")) # %X:本地相應的時間表示
7、時間元組轉換為格式化時間
import time timStamp = 1556348505 # 需要轉換的時間戳 struct_time = time.localtime(timStamp) # 時間戳轉換為時間元組 print(time.strftime("%Y-%m-%d %H:%M:%S", struct_time)) # 時間元組轉換為格式化時間 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 本地時間的時間元組轉換為格式化時間
8、格式化時間轉換為時間元組
import time print(time.strptime("2022-04-07 11:12:04", "%Y-%m-%d %H:%M:%S"))
9、生成固定格式的時間表示形式
time.asctime():接受時間元組並返回一個可讀的形式為"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18時07分14秒)的24個字符的字符串。
語法:time.asctime([t]))
參數:t為9個元素的元組或者通過函數 gmtime() 或 localtime() 返回的時間值。
time.ctime():把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式。 如果參數未給或者為None的時候,將會默認time.time()為參數。它的作用相當於 asctime(localtime(secs))。
語法:time.ctime([ sec ])
參數:sec為要轉換為字符串時間的秒數。
import time print(time.asctime()) print(time.ctime()) print(time.asctime(time.localtime())) # 本地時間 print(time.asctime(time.gmtime())) # 格林威治時間 timeStamp = 1556348505 struct_time = time.localtime(timeStamp) print(time.asctime(struct_time)) print(time.ctime(timeStamp))

三、datetime模塊
datetime模塊定義了六個類,分別為:
- datetime.date:表示日期的類,常用的屬性是year、month、day
- datetime.time:表示時間的類,常用的屬性是hour、minute、second、microsecond
- datetime.datetime:表示日期時間的類
- datetime.timedelta:表示兩個date、time、datetime實例之間的時間間隔
- datetime.tzinfo:時區相關信息對象的抽象基類,他們由datetime和time類使用,以提供自定義時間而調整
- datetime.timezone:python3.2新增的功能,實現tzinfo抽象基類的類,表示與UTC的固定偏移量
1、date類
date類有三個參數,datetime.date(year,month,day),返回year-month-day
① 靜態方法和字段
from datetime import date print(date.max) # date對象所能表示的最大日期 print(date.min) # date對象所能表示的最小日期 print(date.resolution) # date對象所表示日期的最小單位,這里是天 print(date.today()) # 返回一個表示當前本地日期的date對象 print(date.fromtimestamp(1556348505)) # 根據給定的時間戳,返回一個date對象
② 方法和屬性
from datetime import date # d1 = date.today() # 返回一個表示當前本地日期的date對象 d1 = date(2022,4,7) # date對象 print(d1.year) # 年 print(d1.month) # 月 print(d1.day) # 日 print(d1.replace(2021, 1, 12)) # 生成一個新的日期對象,用參數指定的年,月,日代替原有對象中的屬性。(原有對象仍保持不變) print(d1.timetuple()) # 返回日期對應的struct_time print(d1.weekday()) # 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此類推 print(d1.isoweekday()) # 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此類推 print(d1.isocalendar()) # 返回格式如(年,第幾周,周的第幾天)的元組 print(d1.isoformat()) # 返回格式如'YYYY-MM-DD’的字符串 print(d1.strftime("%Y-%m-%d %H:%M:%S"))

2、time類
類的定義:class datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ) 。hour為必須參數,其他為可選參數
① 靜態方法和字段
from datetime import time print(time.max) # time類能表示的最大時間 print(time.min) # time類能表示的最小時間 print(time.resolution) # 時間的最小單位,這里是1微妙
② 方法和屬性
from datetime import time d1 = time(16,33,7,24) # time對象 print(d1.hour) # 時 print(d1.minute) # 分 print(d1.second) # 秒 print(d1.microsecond) # 微秒 print(d1.tzinfo) # 返回傳遞給time構造方法的tzinfo對象,如果該參數未給出,則返回None print(d1.replace(10)) # 創建一個新的時間對象,用參數指定的時、分、秒、微秒代替原有對象中的屬性(原有對象仍保持不變) print(d1.isoformat()) # 返回型如"HH:MM:SS"格式的字符串表示 print(d1.strftime("%Y-%m-%d %H:%M:%S"))

3、datetime類
datetime類的定義:class datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ),year, month 和 day是必須要傳遞的參數
① 靜態方法和字段
from datetime import datetime from datetime import date from datetime import time
print(datetime.datetime(2022, 4, 7, 18, 30, 30)) # datetime對象 print(datetime.today()) # 返回一個表示當前本地時間的datetime對象 print(datetime.now()) # 返回一個表示當前本地時間的datetime對象,如果提供了參數tz(datetime.now([tz]),則獲取tz參數所指時區的本地時間 print(datetime.utcnow()) # 返回一個當前utc時間的datetime對象(格林威治時間) print(datetime.fromtimestamp(1556348505)) # 根據時間戮創建一個datetime對象,參數tz指定時區信息;(datetime.fromtimestamp(timestamp[, tz])) print(datetime.utcfromtimestamp(1556348505)) # 根據時間戳創建一個datetime對象(格林威治時間) print(datetime.combine(date.today(), time(18, 10, 6))) # 根據date和time,創建一個datetime對象 print(datetime.strptime("2022-04-07 18:11:33", "%Y-%m-%d %H:%M:%S")) # 將格式字符串轉換為datetime對象
②方法和屬性
from datetime import datetime dt = datetime.now() # datetime對象 print(dt.timestamp()) # 獲取時間戳,等同於time模塊的time.time() print(dt.year) # 年 print(dt.hour) # 時 print(dt.date()) # 獲取date對象 print(dt.time()) # 獲取time對象 print(dt.replace(2002, 2)) # 生成並返回一個新的datetime對象,如果所有參數都沒有指定,則返回一個與原datetime對象相同的對象 print(dt.timetuple()) # 返回datetime對象對應的tuple(不包括tzinfo) print(dt.weekday()) # 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此類推 print(dt.isoweekday()) # 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此類推 print(dt.isocalendar()) # 返回格式如(年,第幾周,周的第幾天)的元組 print(dt.isoformat()) print(dt.ctime()) # 等價於time模塊的time.ctime(sec) print(dt.strftime("%Y-%m-%d %H:%M:%S"))

4、timedelta類,時間加減
timedelta對象表示兩個不同時間之間的差值。如果使用time模塊對時間進行算術運行,只能將字符串格式的時間 和 struct_time格式的時間對象 先轉換為時間戳格式,然后對該時間戳加上或減去n秒,最后再轉換回struct_time格式或字符串格式,這顯然很不方便。而datetime模塊提供的timedelta類可以讓我們很方面的對datetime.date, datetime.time和datetime.datetime對象做算術運算,且兩個時間之間的差值單位也更加容易控制。使用timedelta可以很方便的在日期上做天days,小時hour,分鍾,秒,毫秒,微妙的時間計算,如果要計算月份則需要另外的辦法。
類定義:class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
datetime.timedelta():返回一個時間間隔對象,可以直接與datetime.datetime對象做加減操
datetime.timedelta().total_seconds():時間差中包含的總秒數
import datetime print(datetime.timedelta(days=365).total_seconds()) # 一年包含的總秒數 print(datetime.datetime.now() + datetime.timedelta(3)) # 三天后 print(datetime.datetime.now() + datetime.timedelta(-3)) # 三天前 print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 三小時后 print(datetime.datetime.now() + datetime.timedelta(hours=3, seconds=30)) # 三小時三十秒后 print(datetime.date(2022, 3, 15) + datetime.timedelta(10)) # 2022年3月15日后十天 print(datetime.datetime(2022, 4, 7, 18, 30, 30) + datetime.timedelta(days=10, hours=1)) # 2022年4月7日 18:30:30秒后十天一個小時 print(datetime.datetime.now().date() + datetime.timedelta(days=1)) # 一天后
print(datetime.datetime.now() + datetime.timedelta(weeks=1)) # 當前日期為2022年4月8日,weeks為1則表示一周即7天
5、datetime常用操作
①datetime轉字符串 -------strftime()函數
兩種寫法:datetime.datetime.strftime(datatime對象,格式化的字符串) 或 datatime對象.strftime(格式化的字符串)
備注:若格式化的字符串中含中文,需使用format方式表示
import datetime print(datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) print(datetime.datetime.strftime(datetime.datetime.now(), "%Y{}%m{}%d{} %H{}%M{}%S{}").format('年', '月', '日', '時', '分', '秒')) print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) print(datetime.datetime.now().strftime("%Y{}%m{}%d{} %H{}%M{}%S{}").format('年', '月', '日', '時', '分', '秒'))

②字符串轉datetime ------strptime()函數
寫法:datetime.datetime.strptime(時間字符串,格式化的字符串)
import datetime time1 = datetime.datetime.strptime('2022-04-07 21:02:47', "%Y-%m-%d %H:%M:%S") print(time1, type(time1)) time2 = datetime.datetime.strptime("2024年11月02日 13時50分03秒", "%Y年%m月%d日 %H時%M分%S秒") print(time2,type(time2))

③時間差操作 ------timedelta()
可加入的參數:
weeks=0 周數,數字1表示七天;
days=0 天數;
hours=0 小時數;
minutes=0 分鍾數;
seconds=0 秒數;
milliseconds=0 毫秒數,千分之一秒;
microseconds=0 微秒數;百萬分之一秒.
具體見上方timedelta
④時間戳操作
import datetime timeStamp = datetime.datetime.now().timestamp() # 獲取datetime對象的時間戳 print(timeStamp) print(datetime.datetime.fromtimestamp(timeStamp)) # 由時間戳初始化datetime對象
四、計算過去時間和未來時間代碼
import datetime import time def get_date_time(days=0, hours=0, minutes=0, seconds=0, micro_seconds=0, date_format='%Y-%m-%d %H:%M:%S'): '獲取時間,之前的時間(day=-90代表往前推90天)或未來的時間(day=90代表往后推90天)' now_time = datetime.datetime.now() need_time = now_time + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds, microseconds=micro_seconds) need_time = need_time.strftime(date_format) print(need_time) return need_time def get_last_time(second): '獲取過去的時間,second是當前時間比過去相差的秒數' last = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time() - second)) # 當前時間之前推多少秒 return last
——————————————————————
參考文章:https://www.cnblogs.com/haitaoli/p/10823403.html
https://blog.csdn.net/gty931008/article/details/80254806