import time
import calendar
from datetime import timedelta, datetime, date
format_ymdhms = "%Y-%m-%d %H:%M:%S"
format_ymdhm = "%Y-%m-%d %H:%M"
format_ymd = "%Y-%m-%d"
format_ymdhms_ = "%Y%m%d%H%M%S"
def db_datetime_to_str(dbtime):
if isinstance(dbtime, datetime) or isinstance(dbtime, date):
return str(dbtime)
return dbtime
def get_thistime_nextyear(resdatetime: datetime):
if resdatetime.month == 2 and resdatetime.day == 29:
return resdatetime.replace(year=(resdatetime.year + 1), day=28)
return resdatetime.replace(year=(resdatetime.year + 1))
def days_after_time(resdatetime: datetime, daynum: int):
return resdatetime + timedelta(days=daynum)
def days_before_time(resdatetime: datetime, daynum: int):
return resdatetime - timedelta(days=daynum)
def get_firstday_of_month(year: int, mon: int):
return date(year, mon, 1)
def get_datetime_between(d1: datetime, d2: datetime):
if d1 > d2:
b = d1 - d2
else:
b = d2 - d1
if b.days == 0:
return get_lessaday_str_of_timedelta(b)
return str(b.days) + "天" + get_lessaday_str_of_timedelta(b)
def get_date_between(d1: date, d2: date):
if d1 > d2:
b = d1 - d2
else:
b = d2 - d1
return str(b.days) + "天"
def get_lessaday_str_of_timedelta(res: timedelta):
if (res.seconds / 3600) < 1:
return str((int)(res.seconds / 60)) + "分" + str(res.seconds % 60) + "秒"
else:
return str((int)(res.seconds / 3600)) + "时" + str((int)(res.seconds % 3600 / 60)) + "分" + str(
res.seconds % 60) + "秒"
def get_days_of_month(year: int, mon: int):
return calendar.monthrange(year, mon)[1]
def str_to_datetime(str):
try:
if ':' in str:
return datetime.strptime(str, format_ymdhms)
return datetime.strptime(str, format_ymd)
except:
return None
def str_to_date(str):
try:
if ':' in str:
return datetime.strptime(str, format_ymdhms).date()
return datetime.strptime(str, format_ymd).date()
except:
return None
def get_datenow_str_ymdhms():
return time.strftime(format_ymdhms, time.localtime())
def get_datenow_str_ymd():
return time.strftime(format_ymd, time.localtime())
def get_datenow_str_ymdhms_():
return time.strftime(format_ymdhms_, time.localtime())
def get_datenow_millis_str():
return time.mktime(time.localtime())
def get_date_str_ymdhms(dateRes):
try:
if isinstance(dateRes, float) | isinstance(dateRes, int):
return time.strftime(format_ymdhms, time.localtime(dateRes))
elif isinstance(dateRes, str):
return time.strftime(format_ymdhms, time.strptime(dateRes, format_ymd))
else:
return '时间转换错误'
except (TypeError, ValueError):
return '时间转换错误TypeError,ValueError'
def get_date_str_ymd(dateRes):
try:
if isinstance(dateRes, float) | isinstance(dateRes, int):
return time.strftime(format_ymd, time.localtime(dateRes))
elif isinstance(dateRes, str):
return time.strftime(format_ymd, time.strptime(dateRes, format_ymdhms))
else:
return '时间转换错误'
except (TypeError, ValueError):
return '时间转换错误TypeError,ValueError'
def get_date_str_ymdhm(dateRes):
try:
if isinstance(dateRes, float) | isinstance(dateRes, int):
return time.strftime(format_ymdhm, time.localtime(dateRes))
elif isinstance(dateRes, str):
return time.strftime(format_ymdhm, time.strptime(dateRes, format_ymdhms))
else:
return '时间转换错误'
except (TypeError, ValueError):
return '时间转换错误TypeError,ValueError'
def getDateStrMillis(dateRes):
try:
if isinstance(dateRes, str):
if dateRes.count(":") == 1:
return time.mktime(time.strptime(dateRes, format_ymdhm))
elif dateRes.count(":") == 2:
return time.mktime(time.strptime(dateRes, format_ymdhms))
else:
return time.mktime(time.strptime(dateRes, format_ymd))
else:
return 0
except:
return 0
def is_valid_date(strdate):
try:
if ":" in strdate:
time.strptime(strdate, "%Y-%m-%d %H:%M:%S")
else:
time.strptime(strdate, "%Y-%m-%d")
return True
except:
return False