def setDayOfWeekInYear(self, offset, day): # Set to first day in year self.mMonth = 1 self.mDay = 1 # Determine first weekday in year first_day = self.getDayOfWeek() if offset > 0: cycle = (offset - 1) * 7 + day cycle -= first_day if first_day > day: cycle += 7 self.mDay = cycle + 1 elif offset < 0: first_day += 365 + [1, 0][not utils.isLeapYear(self.mYear)] - 1 first_day %= 7 cycle = (-offset - 1) * 7 - day cycle += first_day if day > first_day: cycle += 7 self.mDay = 365 + [1, 0][not utils.isLeapYear(self.mYear)] - cycle self.normalise()
def setYearDay(self, day, allow_invalid=False): # 1 .. 366 offset from start, or # -1 .. -366 offset from end if day == 366: self.mMonth = 12 self.mDay = 31 if utils.isLeapYear(self.mYear) else 32 elif day == -366: self.mMonth = 1 if utils.isLeapYear(self.mYear) else 1 self.mDay = 1 if utils.isLeapYear(self.mYear) else 0 elif day > 0: # Offset current date to 1st January of current year self.mMonth = 1 self.mDay = 1 # Increment day self.mDay += day - 1 elif day < 0: # Offset current date to 1st January of next year self.mMonth = 12 self.mDay = 31 # Decrement day self.mDay += day + 1 if not allow_invalid: # Normalise to get proper year/month/day values self.normalise() else: self.changed()