python3 日期时间转换,加减一段日期时间

一、转换

time:

 

datetime:

图片来自:http://blog.sina.com.cn/s/blog_b09d460201018o0v.html

这两张图可以解决大部分问题,但我想说的是下面那个

 

 

二、转换和加减

to方法,to_xxx()

支持的时间类型有4种:

(1)datetime

(2)时间字符串 + 格式模板

(3)时间戳

(4)时间元组

 

 

import time
import datetime


# region to_xxx

# region time  -- datetime.datetime是原点,是核心中间类

时间字符串_模板 = "%Y-%m-%d %H:%M:%S"
def to_datetime(字符串or时间戳or时间元组 = 0, 格式字符串=时间字符串_模板, 增加几秒=0, 增加几分钟=0, 增加几小时=0, 增加几天=0):
    obj = 字符串or时间戳or时间元组

    def from_str_to_datetime():
        字符串 = obj # type:str
        字符串 = 字符串.strip()
        if 字符串=="" or 字符串=="0":
            return get_now_datetime()
        return datetime.datetime.strptime(字符串, 格式字符串)

    def from_时间元组_to_datetime():
        return datetime.datetime.fromtimestamp(obj)

    def from_普通元组_to_datetime():
        nonlocal obj
        普通元组 = obj # type:tuple
        if 普通元组.count() < 9:
            补充个数 = 9 - 普通元组.count()
            for i in range(补充个数):
                普通元组 += (-1)
        obj = time.mktime(普通元组)
        return from_时间戳_to_datetime()

    def from_时间戳_to_datetime():
        时间戳 = obj  # type:float
        if 时间戳==0:
            return get_now_datetime()
        return datetime.datetime.fromtimestamp(时间戳)

    def from_datetime_to_datetime():
        return obj

    def default():
        raise Exception(f"参数类型未支持:{repr(type(obj))}")

    def get_now_datetime():
        return datetime.datetime.now()

    switch = {
        "<class 'str'>": from_str_to_datetime,
        "<class 'int'>": from_时间戳_to_datetime,
        "<class 'float'>": from_时间戳_to_datetime,
        "<class 'tuple'>": from_普通元组_to_datetime,
        "<class 'time.struct_time'>": from_时间元组_to_datetime,
        "<class 'datetime.datetime'>": from_datetime_to_datetime,
    }
    原点时间 = switch.get(repr(type(obj)), default)()

    # 接下来处理时间的增减
    增加的时间 = datetime.timedelta(seconds=增加几秒,minutes=增加几分钟,hours=增加几小时,days=增加几天)
    return 原点时间 + 增加的时间

def to_时间字符串(datetime_or_字符串or时间戳or时间元组 = 0, 格式字符串=时间字符串_模板, 增加几秒=0, 增加几分钟=0, 增加几小时=0, 增加几天=0):
    时间对象 = to_datetime(datetime_or_字符串or时间戳or时间元组, 格式字符串, 增加几秒, 增加几分钟, 增加几小时, 增加几天)
    return 时间对象.strftime(格式字符串)

def to_时间戳(datetime_or_字符串or时间戳or时间元组 = 0, 增加几秒=0, 增加几分钟=0, 增加几小时=0, 增加几天=0):
    时间对象 = to_datetime(datetime_or_字符串or时间戳or时间元组, 时间字符串_模板, 增加几秒, 增加几分钟, 增加几小时, 增加几天)
    return time.mktime(时间对象.timetuple())

def to_时间元组(datetime_or_字符串or时间戳or时间元组 = 0, 增加几秒=0, 增加几分钟=0, 增加几小时=0, 增加几天=0):
    时间对象 = to_datetime(datetime_or_字符串or时间戳or时间元组, 时间字符串_模板, 增加几秒, 增加几分钟, 增加几小时, 增加几天)
    return 时间对象.timetuple()

def to_unix(datetime_or_字符串or时间戳or时间元组 = 0, 增加几秒=0, 增加几分钟=0, 增加几小时=0, 增加几天=0):
    return to_时间戳(datetime_or_字符串or时间戳or时间元组, 增加几秒, 增加几分钟, 增加几小时, 增加几天)


def to_now_datetime():
    return to_datetime(0)

def to_now_时间字符串():
    return to_时间字符串(0)

def to_now_时间戳():
    return to_时间戳(0)

def to_now_时间元组():
    return to_时间元组(0)


def x分钟前的unix(分钟数 = 0):
    return to_unix(0, 增加几分钟= -分钟数)

# endregion

# endregion

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值