def daterange_from_path(path): '''Determine the calendar dates mapped by a specific page @param path: a L{Path} object @returns: a 3-tuple of: - the page type (one of "C{day}", "C{week}", "C{month}", or "C{year}") - a C{datetime.date} object for the start date - a C{datetime.date} object for the end date or C{None} when the page does not map a date ''' if date_path_re.match(path.name): type = 'day' year, month, day = map(int, path.name.rsplit(':', 3)[-3:]) date = datetime.date(year, month, day) end_date = date elif week_path_re.match(path.name): type = 'week' year, week = path.name.rsplit(':', 2)[-2:] year, week = map(int, (year, week[5:])) # Assumes "Week XX" string date, end_date = dates_for_week(year, week) elif month_path_re.match(path.name): type = 'month' year, month = map(int, path.name.rsplit(':', 2)[-2:]) date = datetime.date(year, month, 1) if month == 12: end_date = datetime.date(year, 12, 31) else: end_date = datetime.date(year, month+1, 1) + datetime.timedelta(-1) elif year_path_re.match(path.name): type = 'year' year = int(path.name.rsplit(':', 1)[-1]) date = datetime.date(year, 1, 1) end_date = datetime.date(year, 12, 31) else: return None # Not a calendar path return type, date, end_date
def new_from_weeknumber(cls, year, week, weekday): assert isinstance(weekday, int) and 0 <= weekday <= 7 start, end = dates_for_week(year, week) if start.isoweekday() == 1: # monday offset = weekday - 1 else: # sunday offset = weekday if offset != 0: start = start + datetime.timedelta(days=offset) return cls(start.year, start.month, start.day)
def new_from_weeknumber(cls, year, week, weekday): if not (isinstance(weekday, int) and 0 <= weekday <= 7): raise ValueError('Not a weekday: %i (must be between 0 and 7)' % weekday) start, end = dates_for_week(year, week) if start.isoweekday() == 1: # monday offset = weekday - 1 else: # sunday offset = weekday if offset != 0: start = start + datetime.timedelta(days=offset) return cls(start.year, start.month, start.day)
def runTest(self): # now() dt = datetime.now() s = dt.isoformat() self.assertTrue(isinstance(s, str) and len(s) > 0) s = dt.strftime("%z") self.assertTrue(isinstance(s, str) and len(s) > 0) s = dt.strftime("%Z") self.assertTrue(isinstance(s, str) and len(s) > 0) # strftime s = datetime.strftime('%a', dt) self.assertTrue(isinstance(s, str) and len(s) > 0) s = datetime.strftime('%%', dt) self.assertEqual(s, '%') # Failed under msys python3.7.2 #s = datetime.strftime('%u', dt) #self.assertTrue(isinstance(s, str) and len(s) > 0) #s = datetime.strftime('%V', dt) #self.assertTrue(isinstance(s, str) and len(s) > 0) # strfcal s = datetime.strfcal('%w', dt) self.assertTrue(isinstance(s, str) and len(s) > 0) s = datetime.strfcal('%W', dt) self.assertTrue(isinstance(s, str) and len(s) > 0) s = datetime.strfcal('%Y', dt) self.assertTrue(isinstance(s, str) and len(s) > 0) s = datetime.strfcal('%%', dt) self.assertEqual(s, '%') # weekcalendar year, week, weekday = datetime.weekcalendar(dt) self.assertTrue(isinstance(year, int) and 1900 < year and 3000 > year) self.assertTrue(isinstance(week, int) and 1 <= week and 53 >= week) self.assertTrue( isinstance(weekday, int) and 1 <= weekday and 7 >= weekday) # dates_for_week start, end = datetime.dates_for_week(year, week) self.assertTrue(isinstance(start, datetime.date)) self.assertTrue(isinstance(end, datetime.date)) self.assertTrue(start <= dt.date() and end >= dt.date())
def runTest(self): # now() dt = datetime.now() s = dt.isoformat() self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = dt.strftime("%z") self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = dt.strftime("%Z") self.assertTrue(isinstance(s, basestring) and len(s) > 0) # strftime s = datetime.strftime('%a', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strftime('%%', dt) self.assertEqual(s, '%') s = datetime.strftime('%u', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strftime('%V', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) # strfcal s = datetime.strfcal('%w', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%W', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%Y', dt) self.assertTrue(isinstance(s, basestring) and len(s) > 0) s = datetime.strfcal('%%', dt) self.assertEqual(s, '%') # weekcalendar year, week, weekday = datetime.weekcalendar(dt) self.assertTrue(isinstance(year, int) and 1900 < year and 3000 > year) self.assertTrue(isinstance(week, int) and 1 <= week and 53 >= week) self.assertTrue(isinstance(weekday, int) and 1 <= weekday and 7 >= weekday) # dates_for_week start, end = datetime.dates_for_week(year, week) self.assertTrue(isinstance(start, datetime.date)) self.assertTrue(isinstance(end, datetime.date)) self.assertTrue(start <= dt.date() and end >= dt.date())
def __init__(self, year, week): self.year = year self.week = week self.first_day, self.last_day = dates_for_week(year, week)