python3日時変換、期間の加算と減算

1.変換

時間:

 

日付時刻:

画像:http://blog.sina.com.cn/s/blog_b09d460201018o0v.html

これらの2つの写真はほとんどの問題を解決できますが、私が言いたいのは以下の写真です

 

 

2、変換と加算と減算

toメソッド、to_xxx()

サポートされている時間タイプは4つあります。

(1)日時

(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

 

 

おすすめ

転載: blog.csdn.net/u013595395/article/details/111772052
おすすめ