# encoding: utf-8 import calendar import time from datetime import datetime import pytz YMDHMS_FORMAT = "%Y-%m-%d %H:%M:%S" YMDHMS_FORMAT_ZONE8 = "%Y-%m-%d %H:%M:%S+8:00" YMD_FORMAT = "%Y-%m-%d" HMS_FORMAT = "%H:%M:%S" YMD_SIMPLE = "%Y%m%d" YMD = "%Y.%m.%d" YMDHM_CN = "%Y年%m月%d日 %H:%M" tz_sh = pytz.timezone('Asia/Shanghai') def str2dt(datetime_str, time_format): return datetime.strptime(datetime_str, time_format) def dt2str(date_time, time_format): return date_time.strftime(time_format) def ts_second_2str(ts_second, time_format): return ts_second_to_dt(ts_second).strftime(time_format) def ts_mills_2str(ts_mills, time_format): return ts_second_2str(ts_mills / 1000, time_format) def dt2ts_mills(date_time): return int(time.mktime(date_time.timetuple())) * 1000 def ts_second_to_dt(ts_second): return datetime.fromtimestamp(ts_second) def ts_mills_to_dt(ts_mills): return datetime.fromtimestamp(ts_mills / 1000) def dt2ts_second(dt): """ 时间转换为时间戳(单位秒) """ return int(time.mktime(dt.timetuple())) def now(): """ 上海时区当前时间 """ return datetime.now(tz_sh).replace(tzinfo=None) def now_str(time_format): return dt2str(now(), time_format) def now_ts_second(): return dt2ts_second(now()) def now_ts_mills(): return dt2ts_mills(now()) def get_run_time(args): import datetime run_time = (datetime.datetime.now() - datetime.timedelta(minutes=args)).strftime("%Y-%m-%d %H:%M:%S") return run_time # def get_current_week(): # """ # 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒 # :param date_str: 如:"2020-05-01" # :return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒 # """ # import datetime # monday, sunday = datetime.date.today(), datetime.date.today() # one_day = datetime.timedelta(days=1) # while monday.weekday() != 0: # monday -= one_day # while sunday.weekday() != 6: # sunday += one_day # # week_dict = { # 'monday': monday, # 'sunday': sunday # } # return week_dict def get_current_week(data_dt): """ 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒 :param date_str: 如:"2020-05-01" :return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒 """ import datetime now_time = datetime.datetime.strptime(data_dt + " 00:00:00", "%Y-%m-%d %H:%M:%S") monday = now_time - datetime.timedelta(days=now_time.weekday(), hours=now_time.hour, minutes=now_time.minute, seconds=now_time.second, microseconds=now_time.microsecond) sunday = monday + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) week_dict = { 'monday': monday, 'sunday': sunday } return week_dict # # def get_current_week(data_dt): # """ # 给定一个日期-返回日期所在上周五的0点时间 和 本周四23点59分59秒 # :param date_str: 如:"2020-05-01" # :return: 给定一个日期-返回日期所在上周五的0点时间 和 本周四23点59分59秒 # """ # import datetime # now_time = datetime.datetime.strptime(data_dt + " 00:00:00", "%Y-%m-%d %H:%M:%S") # last_friday = now_time - datetime.timedelta(days=(now_time.weekday() + 3) % 7, hours=now_time.hour, # minutes=now_time.minute, seconds=now_time.second, # microseconds=now_time.microsecond) # thursday = last_friday + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) # week_dict = { # 'last_friday': last_friday, # 'thursday': thursday # } # return week_dict # 获取周一至周日的日期 def get_monday_to_sunday(data_dt): """ 获取周一至周日的日期 """ import datetime now_time = datetime.datetime.strptime(data_dt + " 00:00:00", "%Y-%m-%d %H:%M:%S") monday = now_time - datetime.timedelta(days=(now_time.weekday()) % 7, hours=now_time.hour, minutes=now_time.minute, seconds=now_time.second, microseconds=now_time.microsecond) sunday = monday + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) week_dict = { 'monday': monday, 'sunday': sunday } return week_dict # def get_current_week(data_dt): # """ # 给定一个日期-返回日期所在上周六的0点时间 和 本周五23点59分59秒 # :param date_str: 如:"2020-05-01" # :return: 给定一个日期-返回日期所在上周六的0点时间 和 本周五23点59分59秒 # """ # import datetime # now_time = datetime.datetime.strptime(data_dt + " 00:00:00", "%Y-%m-%d %H:%M:%S") # last_saturday = now_time - datetime.timedelta(days=(now_time.weekday() + 2) % 7, hours=now_time.hour, # minutes=now_time.minute, seconds=now_time.second, # microseconds=now_time.microsecond) # friday = last_saturday + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) # week_dict = { # 'last_saturday': last_saturday, # 'friday': friday # } # return week_dict def month_start_and_end(data_dt): """ 年份 date(2017-09-08格式) :param data_dt: :return:本月第一天日期和本月最后一天日期 """ if data_dt.count('-') != 2: raise ValueError('- is error') year, month = str(data_dt).split('-')[0], str(data_dt).split('-')[1] end = calendar.monthrange(int(year), int(month))[1] start_date = '%s-%s-01' % (year, month) end_date = '%s-%s-%s' % (year, month, end) month_dict = { 'start_date': start_date, 'end_date': end_date } return month_dict if __name__ == "__main__": print(now()) print(dt2str(now(), YMDHMS_FORMAT)) print(str2dt('2021-05-01', YMD_FORMAT)) print(get_monday_to_sunday('2021-08-23'))