python-对时间日期的各种操作(获取时间,获取偏移量时间)

濮冠宇
2023-12-01

"""
python的各种时间操作
"""
import datetime
import time
from typing import Union

time_format_all = "%Y-%m-%d %H:%M:%S"


################################## 时间转换
def convert_dt_2_ts(dt: Union[datetime.datetime, datetime.date]) -> int:
    """
    转换 dt 时间为 时间戳
    :param dt:
    :return:
    """
    return int(time.mktime(dt.timetuple()))


def convert_ts_2_strDt(ts, tf=time_format_all) -> str:
    """
    转换 ts 格式的日期时间 dt 类型
    """
    return time.strftime(tf, time.localtime(ts))


def convert_dt_2_str(dt: datetime, tf=time_format_all):
    """
    转换 dt 格式的日期为 str 类型
    :param dt:
    :param tf:
    :return:
    """
    return dt.strftime(tf)


################################## 获取时间
def get_today_date() -> datetime.date:
    """
    返回当天的日期 date
    :return:
    """

    return datetime.date.today()


def get_today_str_datetime() -> str:
    """
    返回当天 datetime 日期的字符串
    :return:
    """
    return time.strftime(time_format_all, time.localtime())


def get_today_ts() -> int:
    """
    返回当天的日期的时间戳:
    :return:
    """
    return convert_dt_2_ts(get_today_date())


def get_today_date_str() -> str:
    """
    返回当天的日期
    :return:
    """
    return convert_ts_2_strDt(get_today_ts())


def get_today_datetime_str() -> str:
    """
    返回当天的 datetime 字符串
    :return:
    """
    return time.strftime(time_format_all, time.localtime())


################################## 获取偏移量时间
def get_day_by_offset(daily: int) -> datetime.date:
    """
    获取 daily 偏移量的时间日期
        +1 一天之后的
        -1 一天之前的
    :param daily:
    :return:
    """
    return get_today_date() + datetime.timedelta(days=daily)


def get_yesterday_ago_ts():
    """
    获取 昨天 的时间戳
    :return:
    """
    return convert_dt_2_ts(get_day_by_offset(-1))


def get_day_before_3_ago_ts():
    """
    获取 3天前 的时间戳
    :return:
    """
    return convert_dt_2_ts(get_day_by_offset(-3))


def get_tomorrow_ago_dt():
    """
    获取 明天 的日期
    :return:
    """
    return get_day_by_offset(1).strftime(time_format_all)


def get_tomorrow_ago_ts():
    """
    获取 明天 的时间戳
    :return:
    """
    return convert_dt_2_ts(get_day_by_offset(1))


def get_1_mouth_ago_dt():
    """
    获取一个月之前的日期
    :return:
    """
    return get_day_by_offset(-30).strftime(time_format_all)


def get_1mouth_ago_ts():
    """
    获取一个月之前的时间戳
    :return:
    """
    return convert_dt_2_ts(get_day_by_offset(-30))


def get_day_lastSecond_dt(dt=get_today_date()) -> str:
    """
    虎丘 某天的最后一秒 的日期
    :param dt:
    :return:
    """
    offset_second = 24 * 60 * 60 - 1

    return convert_ts_2_strDt(convert_dt_2_ts(dt) + offset_second)


def get_lastNew_30minutes_ts():
    """
    获取距离最近的半小时时间戳
    :return:
    """
    unit = 3600 / 2
    cur_time = int(time.time())

    return int(cur_time - (cur_time % unit))


格式化特殊时间字符串 “2020-10-16T17:36:00+08:00”#


import datetime
t = "2020-10-16T17:36:00+08:00"

new_t = datetime.datetime.strptime(t,"%Y-%m-%dT%H:%M:%S+08:00").strftime("%Y-%m-%d %H:%M:%S")
# '2020-10-16 17:36:00'


t2 = "2020-10-16T17:36:00Z"
new_t2 = datetime.datetime.strptime(t2,"%Y-%m-%dT%H:%M:%SZ").strftime("%Y-%m-%d %H:%M:%S")
# '2020-10-16 17:36:00'
 类似资料: