python 비표 준 시간의 변환

일치 가능 한 구조:
오늘~그저께,며칠 전,분 초 전 등|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<F>[-+])(?P<H>\d{2}):?(?P<M>\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):
    """
              ,        
                0000-00-00 00:00:00
              |  ~  ,    ,      | 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<S>\d+)\s*  ? ', x) \
               or re.search(r'(?P<M>\d+)\s*   ', x) \
               or re.search(r'(?P<H>\d+)\s*   ', x) \
               or re.search(r'(?P<d>\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<Y>\d+)[/-](?P<m>\d+)[/-](?P<d>\d+)(\s+(?P<H>\d{1,2}):(?P<M>\d{2})(:(?P<S>\d{2}))?)?',
                             x) or re.search('', '')).groupdict()
            if res == dict():
                #          ,   XX-XX XX:XX:XX   -   : :    17 10 10   : : 
                res = (re.search(
                    r'(?P<m>\d{1,2})[/-](?P<d>\d+)(\s+(?P<H>\d{2}):(?P<M>\d{2})(:(?P<S>\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,
                    #        ,     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 ""
        #           ,        
        if int(time.mktime((dt - offset).timetuple())) > int(time.time()):
            #         ,    
            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   ', 'auto', ''))
    print(parse_date('   00:30', 'auto', ''))
    print(parse_date('07-20', 'auto', ''))
python 비 표준 시간 전환 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python 비 표준 시간 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기