python 時間相關的操作
阿新 • • 發佈:2020-09-21
import datetime a = str(datetime.datetime.now().strftime('%y-%m-%d %H:%M:%S')) + ' 星期 ' + str(datetime.datetime.now().isoweekday()) print(a) # 結果:20-09-18 19:32:08 星期 5
import datetime a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + ' 星期 ' + str(datetime.datetime.now().isoweekday())print(a) # 結果:2020-09-18 19:32:08 星期 5
import datetime d = datetime.datetime.now().strftime('%F %T') print(d) # 結果:2020-09-21 16:13:18
import time d = time.strftime('%Y-%m-%d %H:%M:%S ',time.localtime(time.time())) print(d) # 結果:2020-09-21 16:13:18
Python提供了datetime、time和 calendar 模組用來處理日期和時間,時間間隔是以秒為單位的浮點數.每個時間戳都是自1970年1月1日來算.
Datetime
datetime在python中是用來處理時間的一個模組,datetime模組下又包含了幾個類
類名
|
功能
|
date
|
日期物件,常用的屬性有year, month, day
|
time
|
時間物件
|
datetime
|
日期時間物件,常用的屬性有hour, minute, second, microsecond
|
timedelta
|
時間間隔,即兩個時間點之間的長度
|
datetime_CAPI
|
日期時間物件C語言介面
|
tzinfo
|
時區資訊物件
|
from datetime importdate from datetime import datetime from datetime import timedelta # 計算兩個日期相差多少天 d1 = date(2018, 10, 18) d2 = date(2017, 12, 31) print("(2018, 10, 18)與(2017, 12, 31)相差:", (d1 - d2).days, "天!") # (2018, 10, 18)與(2017, 12, 31)相差: 291 天! # 獲取兩個日期時間的時間差 time1 = datetime(2019, 1, 13, 12, 0, 0) time2 = datetime.now() differtime = (time1 - time2).total_seconds() print("(2019,1,13,12,0,0)與當前時間相差:", differtime, "秒!") # (2019,1,13,12,0,0)與當前時間相差: -53340090.286307 秒! # 當前日期 curdate = date.today() print("curdate =", curdate) # curdate = 2020-09-21 # 計算十天之後的日期時間 nowday = datetime.now() # timedelta類可以很容易地算出前幾天和後幾天的時刻。(timedelta(days= d, hours= h)) # 還可以檢視第幾周對應的時間,例如:timedelta(weeks=20) 20周將被自動轉化為天數 # 前幾天時刻,用減法。 後幾天時刻,則用當前時間加上timedelta(days = d, hours= h) lastday = nowday + timedelta(days=10) print(str(lastday)) # 2020-10-01 20:41:30.286307 # ctime() 返回一個表示日期和時間的字串。 print(lastday.ctime()) # Thu Oct 1 20:41:30 2020 # 檢視某一天是今年的第幾天和第幾周 testday = date(2017, 8, 31) # isocalendar() 函式返回三元組 分別為:年份,週數,周幾 print(testday.isocalendar()) # (2017, 35, 4) # timetuple() 返回時間元祖 print(testday.timetuple()) # time.struct_time(tm_year=2017, tm_mon=8, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)
# 獲取當前時間 from datetime import datetime print(datetime.now()) # 2018-10-08 08:08:13.296957 print(datetime.now().time()) # 08:08:13.296957 print(type(datetime.now())) # <class 'datetime.datetime'>
# 獲取當前日期 from datetime import datetime print(datetime.now().date()) # 2018-10-08 print(type(datetime.now().date())) # <class 'datetime.date'>
# 獲取當前時間的tuple元組
from datetime import datetime print(datetime.now().timetuple()) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=16, tm_min=21, tm_sec=5, tm_wday=3, tm_yday=305, tm_isdst=-1) print(datetime.now().timetuple().tm_year) # 2018 年 print(datetime.now().timetuple().tm_mon) # 11 月 print(datetime.now().timetuple().tm_mday) # 1 日 print(datetime.now().timetuple().tm_hour) # 16 時 print(datetime.now().timetuple().tm_min) # 21 分 print(datetime.now().timetuple().tm_sec) # 5 秒 print(datetime.now().timetuple().tm_wday) # 3 0-6 0是週一,6是週日 print(datetime.now().timetuple().tm_yday) # 305 一年中的第幾天 print(datetime.now().timetuple().tm_isdst) # -1 是否為下令時 1為是 0為不是 -1為未知,預設為-1
# 格式化日期和時間 from datetime import datetime print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # 2018-11-01 19:25:45
# 時間移動 # 使用datetime.timedelta這個方法來前後移動時間,可以用的引數有weeks,days,hours,minutes,seconds,microseconds.使用 days=1代表後一天,days=-1代表前一天,其他引數也一樣 from datetime import datetime from datetime import timedelta print(datetime.now()) # 2018-10-08 08:25:49.546137 print(datetime.now() + timedelta(days=1)) # 2018-10-09 08:25:49.547196
# 獲取兩個時間的時間差 from datetime import datetime nowtime = datetime.now() utctime = datetime.utcnow() print(nowtime - utctime) # 8:00:00 print((nowtime - utctime).total_seconds()) # 以秒計算 # 28800.0
# 時間格式轉換 # datetime轉str格式 from datetime import datetime print(datetime.now()) # 2018-10-08 08:33:37.369422 print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # 2018-10-08 08:33:37 print(datetime.now().strftime("%Y-%m-%d")) # 2018-10-08 print(datetime.now().strftime("%H-%M:%S")) # 08:33:37
# str格式轉datetime from datetime import datetime print(datetime.strptime("2018-10-08 09:00:00", "%Y-%m-%d %H:%M:%S")) # 2018-10-08 09:00:00 print(type(datetime.strptime("2018-10-08 09:00:00", "%Y-%m-%d %H:%M:%S"))) # <class 'datetime.datetime'>
# datetime轉timestamp from datetime import datetime import time now = datetime.now() print(now) # 2018-10-08 08:51:42.215168 print(time.mktime(now.timetuple())) # 1538959902.0 #現在距離1970-01-01 00:00:00的秒數
# timestamp轉datetime from datetime import datetime print(datetime.fromtimestamp(1538959902.0)) # 2018-10-08 08:51:42
# 將2020 Feb 14轉換為2020-02-14格式 from datetime import datetime c_time = "2020 Feb 14" ctime = datetime.strptime(c_time, "%Y %b %d") ctime = str(ctime).split(" ")[0] print(ctime)
# 當時時間 import time localtime = time.localtime() # 返回結構時間 asctime = time.asctime(localtime) # 將結構時間轉換為asctime print(localtime) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=19, tm_min=13, tm_sec=5, tm_wday=3, tm_yday=305, tm_isdst=0) print(asctime) # Thu Nov 1 19:13:05 2018
# 格式化時間和日期 import time formattime1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) formattime2 = time.strftime("%a-%b-%d %H:%M:%S:%Y", time.localtime()) print(formattime1) print(formattime2) ############################# # 2018-11-01 19:16:30 # Thu-Nov-01 19:16:30:2018
# Calendar # Calendar模組有很廣泛的方法用來處理年曆和月曆 import calendar print("2018年的年曆是:") print(calendar.prcal(2018)) cal = calendar.month(2018, 10) print("2018年10月的月曆是:") print(cal) print(calendar.leapdays(2000, 2018)) # 返回2000~2018內的閏年數 print(calendar.weekday(2018, 11, 2)) ##返回2018.11.2是星期幾,0-6
# 時間戳 # python3實現時間戳 import time timestamp = round(time.time() * 1000) print(timestamp)
# 時間戳+祕鑰生成sign驗證 # 以下 時間戳+祕鑰生成sign驗證,廣泛用於網站等進行驗證. # 第一步:把 timestamp+"\n"+金鑰 當做簽名字串 string_to_sign # 第二步:使用HmacSHA256演算法計算簽名,得到 hmac_code # 第三步:將hmac_code進行Base64 encode,最後再把簽名引數再進行urlEncode,得到最終的簽名sign(需要使用UTF-8字符集) import time import hmac import hashlib import base64 import urllib from urllib import parse timestamp = round(time.time() * 1000) secret = 'xiegongzi' # 祕鑰 secret_enc = bytes(secret.encode('utf-8')) string_to_sign = '{}\n{}'.format(timestamp, secret) # 把 timestamp+"\n"+金鑰 當做簽名字串 string_to_sign string_to_sign_enc = bytes(string_to_sign.encode('utf-8')) hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() # 使用HmacSHA256演算法計算簽名,得到 hmac_code hmac_code_base64 = base64.b64encode(hmac_code) # 將hmac_code進行Base64 encode sign = urllib.parse.quote(hmac_code_base64) # 進行urlEncode,得到最終的簽名sign print("sign = ", sign)
# 將時間戳+祕鑰生成sign驗證封裝成函式 import time import hmac import hashlib import base64 import urllib from urllib import parse def sign(strSecret): timesTamp = round(time.time() * 1000) secretEnc = bytes(strSecret.encode('utf8')) # 把 timesTamp+"\n"+金鑰 當做簽名字串 string_to_sign stringToSign = '{}\n{}'.format(timesTamp, strSecret) stringToSignEnc = bytes(stringToSign.encode('utf8')) # 使用HmacSHA256演算法計算簽名,得到 hmacCode hmacCode = hmac.new(secretEnc, stringToSignEnc, digestmod=hashlib.sha256).digest() # 將hmacCode進行Base64 encode hmacCodeBase64 = base64.b64encode(hmacCode) # 將hmacCode進行Base64 encode signName = urllib.parse.quote(hmacCodeBase64) return signName