佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換

python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換

熱門標(biāo)簽:美圖手機(jī) 智能手機(jī) 銀行業(yè)務(wù) 鐵路電話系統(tǒng) 檢查注冊表項(xiàng) 網(wǎng)站文章發(fā)布 呼叫中心市場需求 服務(wù)器配置

可匹配結(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'(?PF>[-+])(?PH>\d{2}):?(?PM>\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'(?PS>\d+)\s*秒鐘?前', x) \

               or re.search(r'(?PM>\d+)\s*分鐘前', x) \

               or re.search(r'(?PH>\d+)\s*小時(shí)前', x) \

               or re.search(r'(?Pd>\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'(?PY>\d+)[/-](?Pm>\d+)[/-](?Pd>\d+)(\s+(?PH>\d{1,2}):(?PM>\d{2})(:(?PS>\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'(?Pm>\d{1,2})[/-](?Pd>\d+)(\s+(?PH>\d{2}):(?PM>\d{2})(:(?PS>\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)換的文章就介紹到這了,更多相關(guān)python非標(biāo)準(zhǔn)時(shí)間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • ROS系統(tǒng)將python包編譯為可執(zhí)行文件的簡單步驟
  • Python中rapidjson參數(shù)校驗(yàn)實(shí)現(xiàn)
  • Python中scrapy下載保存圖片的示例
  • Python動態(tài)規(guī)劃實(shí)現(xiàn)虛擬機(jī)部署的算法思想
  • python 多線程實(shí)現(xiàn)多任務(wù)的方法示例
  • python方差檢驗(yàn)的含義及用法
  • Python函數(shù)實(shí)現(xiàn)學(xué)員管理系統(tǒng)
  • python調(diào)試模式無響應(yīng)解決案例

標(biāo)簽:沈陽 新疆 河南 上海 滄州 長治 紅河 樂山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python非標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    康定县| 民丰县| 新龙县| 娱乐| 鄂托克旗| 晋州市| 海原县| 牟定县| 怀远县| 陵川县| 长葛市| 深泽县| 安乡县| 贵阳市| 博爱县| 栾川县| 赫章县| 福清市| 清镇市| 云南省| 双辽市| 东宁县| 仪征市| 平阴县| 阿拉善右旗| 隆回县| 普宁市| 宣恩县| 巨野县| 集安市| 镇原县| 宁河县| 枣阳市| 苏尼特右旗| 邯郸市| 枝江市| 五常市| 江陵县| 玛纳斯县| 卢湾区| 通城县|