您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python非标准时间的转换

51自学网 2021-10-30 22:25:13
  python
这篇教程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, timedeltaimport reimport timedef 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 offsetdef 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_timeif __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非标准时间内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


OpenCV 图像梯度的实现方法
pandas数值排序的实现实例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。