"""
@ Author: 吕文举 wjlv4
@ File: common_fun.py
@ Time: 2022/9/22
@ Contact: wjlv4@iflytek.com
@ Desc:
"""
import os
from datetime import datetime, timedelta
def str_to_date(st: str, fmt=None, delay: dict = None):
"""
str转成datetime格式
:param st: 字符串
:param fmt: 自定義格式,
:param delay: 延遲時間 {days:1} 延遲1天
:return:
"""
days = 0
hours = 0
minutes = 0
weeks = 0
if delay:
for key in delay.keys():
if key not in ['days', 'hours', 'minutes', 'weeks']:
raise KeyError(f"{key} should be in ['days','hours','minutes','weeks']")
days = delay.get('days', 0)
hours = delay.get('hours', 0)
minutes = delay.get('minutes', 0)
weeks = delay.get('weeks', 0)
if fmt:
_st = datetime.strptime(st, fmt) + timedelta(days=days, hours=hours, minutes=minutes, weeks=weeks)
elif '-' in st:
if len(st) < 11:
_st = datetime.strptime(st, '%Y-%m-%d') + timedelta(days=days, hours=hours, minutes=minutes, weeks=weeks)
else:
_st = datetime.strptime(st, '%Y-%m-%d %H:%M:%S') + timedelta(days=days, hours=hours, minutes=minutes,
weeks=weeks)
elif '/' in st:
if len(st) < 11:
_st = datetime.strptime(st, '%Y/%m/%d') + timedelta(days=days, hours=hours, minutes=minutes, weeks=weeks)
else:
_st = datetime.strptime(st, '%Y/%m/%d %H:%M:%S') + timedelta(days=days, hours=hours, minutes=minutes,
weeks=weeks)
else:
_st = datetime.strptime(st, '%Y%m%d') + timedelta(days=days, hours=hours, minutes=minutes, weeks=weeks)
return _st
def date_to_str(dt: datetime, fmt=None, delay: dict = None):
"""
str轉成datetime格式
:param st: 字符串
:param fmt: 自定義格式,
:param delay: 延遲時間 {days:1} 延遲1天
:return:
"""
days = 0
hours = 0
minutes = 0
weeks = 0
if delay:
for key in delay.keys():
if key not in ['days', 'hours', 'minutes', 'weeks']:
raise KeyError(f"{key} should be in ['days','hours','minutes','weeks']")
days = delay.get('days', 0)
hours = delay.get('hours', 0)
minutes = delay.get('minutes', 0)
weeks = delay.get('weeks', 0)
_td = dt + timedelta(days=days, hours=hours, minutes=minutes, weeks=weeks)
if fmt:
_str = datetime.strftime(_td, fmt)
else:
_str = datetime.strftime(_td, '%Y-%m-%d %H:%M:%S')
return _str
def str_to_timestamp(st: str, fmt=None, delay: dict = None, ms: bool = True):
"""
字符串轉為時間戳
:param st: 字符串
:param fmt: 字符串格式
:param delay: 延時,例如{'days':1,'hours':-3}
:param ms: 是否毫秒模式
:return:
"""
_res = str_to_date(st, fmt=fmt, delay=delay)
ms = 1000 if ms else 1
return _res.timestamp() * ms
def timestamp_to_str(ts: [int, float], fmt=None, delay: dict = None, ms: bool = True):
"""
時間戳轉為字符串
:param ts: 時間戳
:param fmt: 字符串格式
:param delay: 延時,例如{'days':1,'hours':-3}
:param ms: 是否毫秒模式
:return:
"""
ms = 1000 if ms else 1
ts = ts / ms
_date = datetime.fromtimestamp(ts)
_res = date_to_str(_date, fmt)
return _res
def get_today_ts(delay: dict = None, ms: bool = True):
"""
默認獲取今天凌晨的時間戳,可自定義格格式和延遲時間
:return:
"""
return str_to_timestamp(datetime.strftime(datetime.now(), '%Y-%m-%d'), delay=delay, ms=ms)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本