牛客題霸NC3連結串列中環的入口節點Java題解
阿新 • • 發佈:2020-11-27
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
列印結果 | 解釋 | |
print(time.strftime('%a')) | Mon | 星期幾的簡寫 |
print(time.strftime('%A')) | Monday | 星期幾的全稱 |
print(time.strftime('%b')) | Sep | 月分的簡寫 |
print(time.strftime('%B')) | September | 月份的全稱 |
print(time.strftime('%c')) | Mon Sep 21 17:21:42 2020 | 標準的日期的時間串 |
print(time.strftime('%C')) | 20 | 年份的後兩位數字 |
print(time.strftime('%d')) | 21 | 十進位制表示的每月的第幾天 |
print(time.strftime('%D')) | 09/21/20 | 月/天/年 |
print(time.strftime('%e')) | 21 | 在兩字元域中,十進位制表示的每月的第幾天 |
print(time.strftime('%F')) | 2020-09-21 | 年-月-日 |
print(time.strftime('%g')) | 20 | 年份的後兩位數字 |
print(time.strftime('%G')) | 2020 | 使用基於周的年 |
print(time.strftime('%h')) | Sep | 簡寫的月份名 |
print(time.strftime('%H')) | 17 | 24小時制的小時 |
print(time.strftime('%I')) | 05 | 第幾個小時(12小時制,01 - 12) |
print(time.strftime('%j')) | 265 | 十進位制表示的每年的第幾天 |
print(time.strftime('%m')) | 09 | 十進位制表示的月份 |
print(time.strftime('%M')) | 21 | 十進位制表示的分鐘數 |
print(time.strftime('%p')) | PM | 本地的AM或PM的等價顯示 |
print(time.strftime('%r')) | 05:21:43 PM | 12小時的時間 |
print(time.strftime('%R')) | 17:21 | 顯示小時和分鐘:hh:mm |
print(time.strftime('%S')) | 43 | 十進位制的秒數 (01 - 61)不是59,閏年秒佔兩秒 |
print(time.strftime('%T')) | 17:21:43 | 顯示時分秒:hh:mm:ss |
print(time.strftime('%u')) | 1 | 每週的第幾天,星期一為第一天 (值從0到6,星期一為0) |
print(time.strftime('%U')) | 38 | 每年的第幾周,把星期日做為第一天(值從0到53) |
print(time.strftime('%V')) | 39 | 每年的第幾周,使用基於周的年 |
print(time.strftime('%w')) | 1 | 十進位制表示的星期幾(值從0到6,星期天為0) |
print(time.strftime("%W")) | 38 | 每年的第幾周,把星期一做為第一天(值從0到53) |
print(time.strftime("%x")) | 09/21/20 | 標準的日期串 |
print(time.strftime('%X')) | 17:21:43 | 標準的時間串 |
print(time.strftime('%y')) | 20 | 不帶世紀的十進位制年份(值從0到99) |
print(time.strftime('%Y')) | 2020 | 帶世紀部分的十制年份 |
print(time.strftime('%z')) | +0800 | 時區 |
print(time.strftime('%Z')) | 中國標準時間 | 時區名稱,如果不能得到時區名稱則返回空字元 |
print(time.strftime('%%')) | % | 百分號 |