這篇“python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換方法”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換方法”文章吧。
專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、商城開發(fā)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,成都創(chuàng)新互聯(lián)的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
可匹配結(jié)構(gòu):
今天~前天, 幾天前, 分鐘秒前等 | 2017-1-4 12:10 | 2017/1/4 12:10 | 2018年4月2日 12:12 | 2018年4月2日 | 2017-1-4 | 2017/1/4 | 1/4 |
# -*- coding:utf-8 -*- from datetime import datetime, timedelta import re import time def tz_offset(tz): res = (re.search(r"(?P[-+])(?P d{2}):?(?P d{2})", tz) or re.search("", "")).groupdict() offset = (1 if res.get("F", "+")=="+" else -1) * timedelta( hours = int(res.get("H", 0)), minutes = int(res.get("M", 0))) return offset def parse_date(data, fmt, tz): """ 時(shí)間匹配模塊,可轉(zhuǎn)化為固定格式 返回時(shí)間字符串 0000-00-00 00:00:00 可匹配結(jié)構(gòu) |今天~前天, 幾天前,分鐘秒前等 | 2017-1-4 12:10 | 2017/1/4 12:10 | 2018年4月2日 12:12 | 2018年4月2日 | 2017-1-4 | 2017/1/4 | 1/4 | """ offset = tz_offset(tz) if fmt == "auto": now = (datetime.utcnow() + timedelta(hours=8)).replace(microsecond=0) + offset now_1 = now - timedelta(days=1) now_2 = now - timedelta(days=2) # 幾/剛/今天/昨天/前天 x = data.strip() x = x.replace(u"幾", " 0 ") x = x.replace(u"剛[剛才]", now.strftime(" %Y-%m-%d %H:%M:%S ")) x = x.replace(u"今天", now.strftime(" %Y-%m-%d ")) x = x.replace(u"昨天", now_1.strftime(" %Y-%m-%d ")) x = x.replace(u"前天", now_2.strftime(" %Y-%m-%d ")) x = re.sub(r"[年月]", "/", x) x = re.sub(r"[日]", " ", x) x = re.sub(r"s{2,}", r" ", x) # XX前 res = (re.search(r"(?P d+)s*秒鐘?前", x) or re.search(r"(?Pd+)s*分鐘前", x) or re.search(r"(?P d+)s*小時(shí)前", x) or re.search(r"(?P d+)s*天前", x) or re.search("", "")).groupdict() if res: dt = now - timedelta( days=int(res.get("d", 0)), hours=int(res.get("H", 0)), minutes=int(res.get("M", 0)), seconds=int(res.get("S", 0)) ) # 不是幾天前分鐘前的形式 else: # XX-XX-XX XX:XX:XX res = (re.search(r"(?P d+)[/-](?P d+)[/-](?P d+)(s+(?P d{1,2}):(?P d{2})(:(?P d{2}))?)?", x) or re.search("", "")).groupdict() if res == dict(): # 匹配沒有年份的時(shí)候,格式 XX-XX XX:XX:XX 月-日 時(shí):分:秒 或 17年10月10日 時(shí):分:秒 res = (re.search( r"(?Pd{1,2})[/-](?P d+)(s+(?P d{2}):(?P d{2})(:(?P d{2}))?)?", x) or re.search("", "")).groupdict() if res: Y = res.get("Y", now.year) Y = "20" + Y if len(str(Y)) == 2 else Y m = res.get("m", now.month) d = res.get("d", now.day) H = res.get("H", now.hour) M = res.get("M", now.minute) S = res.get("S", 0) dt = datetime( year=int(Y) if Y != None and 1987 <= int(Y) <= now.year else now.year, month=int(m) if m != None else now.month, day=int(d) if d != None else now.day, # 如果沒有時(shí)分秒,則被認(rèn)定為00:00:00 hour=int(H) if H != None else 0, minute=int(M) if M != None else 0, second=int(S) if S != None else 0 ) else: # 1970-01-01 00:00:00 # dt = datetime.utcfromtimestamp(0)+offset return "" # 時(shí)間可能超過當(dāng)前時(shí)間,若超過則減去一年 if int(time.mktime((dt - offset).timetuple())) > int(time.time()): # 時(shí)間超過當(dāng)前時(shí)間,減去一年 delta = timedelta(days=-365) real_time = (dt - offset) + delta real_time = real_time.strftime("%Y-%m-%d %H:%M:%S") else: real_time = (dt - offset).strftime("%Y-%m-%d %H:%M:%S") return real_time if __name__ == "__main__": print(parse_date("2秒前", "auto", "")) print(parse_date("2分鐘前", "auto", "")) print(parse_date("2小時(shí)前", "auto", "")) print(parse_date("昨天 00:30", "auto", "")) print(parse_date("07-20", "auto", ""))
以上就是關(guān)于“python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換方法”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。