python:处理不规律的时间为对应的时间格式(2020-03-21 15:02:36)

统一处理时间标准为:(2020-03-21 15:02:36)


1.从字符串中匹配 【年-月-日】

import re

def format_date(str):
    date = re.findall('\d{4}-\d{2}-\d{2}', str)
    if date:
        return date
    else:
        return '没有符合的时间格式'


a = '2020-08-06啊撒打算的啊2015-3-1 2005-03-21'
print(format_date(a))

结果:在这里插入图片描述


2.随机生成【时:分:秒】

# -------------------------------------------------------随机生成时分秒
import random


def get_random_time():
    H = str(random.randint(0, 24))
    M = str(random.randint(0, 60))
    S = str(random.randint(0, 60))
    random_time = [H, M, S]
    for i in range(0, len(random_time)):
        if len(random_time[i]) == 1:
            random_time[i] = '0' + random_time[i]
    time_ = ':'.join(random_time)
    return time_
    
print(get_random_time())

结果:在这里插入图片描述


3.处理此类形式:【2019-11-20T10:06:09+08:00】

# 1.匹配时间2019-11-20T10:06:09+08:00
def verify_datetime(datetime_):
    pattern = r'((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) (20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$'
    if re.match(pattern, datetime_):
        return True


# 2.处理匹配到的时间
def format_date_tz(raw_date):
    date = raw_date.replace('T', ' ').replace('Z', '').split('+')[0]
    if not verify_datetime(date):
        raise ValueError(raw_date, date)
    return date

print(format_date_tz('2019-11-20T10:06:09+08:00'))

结果:在这里插入图片描述


4.将2020年3月14日处理为【2020-03-14】

x = '2020年3月14日'


# 例如格式为2016年5月17日,月日可能不足两位的
def format_time(date):
    a = date.replace('年', '-').replace('月', '-').strip('日')
    b = a.split('-')
    for i in range(2):
        b[1] = b[1].zfill(2)  # 左填充
        b[2] = b[2].zfill(2)
    b = '-'.join(b)
    return b


print(format_time(x))

结果:在这里插入图片描述


5.获取【几天前/几月前/几周前/几年前】的时间

def get_date_ago(date):
    import datetime
    if date.find('月') != -1:
        month_ago = int(re.findall('(.*?)月', date)[0])
        date = datetime.date.today() - datetime.timedelta(days=int(month_ago * 30))
    elif date.find('天') != -1:
        day_ago = int(re.findall('(.*?)天', date)[0])
        date = datetime.date.today() - datetime.timedelta(days=int(day_ago))
    elif date.find('年') != -1:
        year_ago = int(re.findall('(.*?)年', date)[0])
        date = datetime.date.today() - datetime.timedelta(days=int(year_ago * 365))
    elif date.find('周') != -1:
        week_ago = int(re.findall('(.*?)周', date)[0])
        date = datetime.date.today() - datetime.timedelta(days=int(week_ago * 7))
    return date

print(get_date_ago('3天前'))
print(get_date_ago('3周前'))
print(get_date_ago('3月前'))
print(get_date_ago('3年前'))

结果:在这里插入图片描述


6.处理英文月份和固定格式的格式

def format_Date1(date):
    import datetime
    time_format = str(datetime.datetime.strptime(date, '%b %d, %Y, %H:%M:%S'))
    return time_format


print(format_Date1('Dec 4, 2019, 4:25:41'))

结果:在这里插入图片描述

你可能感兴趣的:(其他)