189 8069 5689

python非标准时间的转换方法

这篇“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, timedelta
import re
import time


def tz_offset(tz):
    res = (re.search(r"(?P[-+])(?Pd{2}):?(?Pd{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"(?Pd+)s*秒钟?前", x) 
               or re.search(r"(?Pd+)s*分钟前", x) 
               or re.search(r"(?Pd+)s*小时前", x) 
               or re.search(r"(?Pd+)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"(?Pd+)[/-](?Pd+)[/-](?Pd+)(s+(?Pd{1,2}):(?Pd{2})(:(?Pd{2}))?)?",
                             x) or re.search("", "")).groupdict()
            if res == dict():
                # 匹配没有年份的时候,格式 XX-XX XX:XX:XX  月-日 时:分:秒 或 17年10月10日 时:分:秒
                res = (re.search(
                    r"(?Pd{1,2})[/-](?Pd+)(s+(?Pd{2}):(?Pd{2})(:(?Pd{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非标准时间的转换方法
本文来源:http://cdxtjz.cn/article/jopdcj.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。