同步操作将从 6tail/lunar-python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-from datetime import timedeltafrom math import ceilfrom . import ExactDate, Solarfrom .util import SolarUtilclass SolarWeek:"""阳历周"""def __init__(self, year, month, day, start):"""通过年月日初始化:param year: 年:param month: 月,1到12:param day: 日,1到31:param start: 星期几作为一周的开始,1234560分别代表星期一至星期天"""self.__year = yearself.__month = monthself.__day = dayself.__start = start@staticmethoddef fromDate(date, start):return SolarWeek(date.year, date.month, date.day, start)@staticmethoddef fromYmd(year, month, day, start):return SolarWeek(year, month, day, start)def getYear(self):return self.__yeardef getMonth(self):return self.__monthdef getDay(self):return self.__daydef getStart(self):return self.__startdef toString(self):return "%d.%d.%d" % (self.__year, self.__month, self.getIndex())def toFullString(self):return "%d年%d月第%d周" % (self.__year, self.__month, self.getIndex())def __str__(self):return self.toString()def getIndex(self):"""获取当前日期是在当月第几周:return: 周序号,从1开始"""first_day = ExactDate.fromYmd(self.__year, self.__month, 1)first_day_week = first_day.isoweekday()if 7 == first_day_week:first_day_week = 0offset = first_day_week - self.__startif offset < 0:offset += 7return int(ceil((self.__day + offset) * 1.0 / 7))def getFirstDay(self):"""获取本周第一天的阳历日期(可能跨月):return: 本周第一天的阳历日期"""date = ExactDate.fromYmd(self.__year, self.__month, self.__day)week = date.isoweekday()if week == 7:week = 0prev = week - self.__startif prev < 0:prev += 7date = date + timedelta(days=-prev)return Solar.fromDate(date)def getFirstDayInMonth(self):"""获取本周第一天的阳历日期(仅限当月):return: 本周第一天的阳历日期"""for day in self.getDays():if self.__month == day.getMonth():return dayreturn Nonedef getDays(self):"""获取本周的阳历日期列表(可能跨月):return: 本周的阳历日期列表"""days = []first = self.getFirstDay()days.append(first)for i in range(1, 7):days.append(first.next(i))return daysdef getDaysInMonth(self):"""获取本周的阳历日期列表(仅限当月):return: 本周的阳历日期列表(仅限当月)"""days = []for day in self.getDays():if self.__month == day.getMonth():days.append(day)return daysdef next(self, weeks, separate_month):"""周推移:param weeks: 推移的周数,负数为倒推:param separate_month: 是否按月单独计算:return: 推移后的阳历周"""if 0 == weeks:return SolarWeek.fromYmd(self.__year, self.__month, self.__day, self.__start)if separate_month:n = weeksc = ExactDate.fromYmd(self.__year, self.__month, self.__day)week = SolarWeek.fromDate(c, self.__start)month = self.__monthplus = n > 0days = 7 if plus else -7while 0 != n:c = c + timedelta(days=days)week = SolarWeek.fromDate(c, self.__start)week_month = week.getMonth()if month != week_month:index = week.getIndex()if plus:if 1 == index:first_day = week.getFirstDay()week = SolarWeek.fromYmd(first_day.getYear(), first_day.getMonth(), first_day.getDay(), self.__start)week_month = week.getMonth()else:c = ExactDate.fromYmd(week.getYear(), week.getMonth(), 1)week = SolarWeek.fromDate(c, self.__start)else:size = SolarUtil.getWeeksOfMonth(week.getYear(), week.getMonth(), self.__start)if size == index:first_day = week.getFirstDay()last_day = first_day.next(6)week = SolarWeek.fromYmd(last_day.getYear(), last_day.getMonth(), last_day.getDay(), self.__start)week_month = week.getMonth()else:c = ExactDate.fromYmd(week.getYear(), week.getMonth(), SolarUtil.getDaysOfMonth(week.getYear(), week.getMonth()))week = SolarWeek.fromDate(c, self.__start)month = week_monthn -= 1 if plus else -1return weekelse:c = ExactDate.fromYmd(self.__year, self.__month, self.__day)c = c + timedelta(days=weeks * 7)return SolarWeek.fromDate(c, self.__start)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。