"""
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'