def parse_duration(s): bits = re.split('[^0-9]+', s) if len(bits) == 2: return timedelta(hours=int(bits[0]), minutes=int(bits[1])) elif len(bits) == 3: return timedelta(hours=int(bits[0]), minutes=int(bits[1]), seconds=int(bits[2]))
def get_current_next(group, howmany=2, delta=datetime_tz.timedelta()): if group in data: now = datetime_tz.datetime_tz.utcnow( ) #+ datetime_tz.timedelta(hours=13, days=7, minutes=75) return islice(ifilter(lambda x: x['end'] > now, data[group]), howmany) else: return []
def get_current_next(group, howmany=2, delta=datetime_tz.timedelta()): if group in data: now = datetime_tz.datetime_tz.utcnow() return islice( ifilter( lambda x: x['end'] > now, data[group] ), howmany ) else: return []
def testBetween(self): iterate = datetime_tz.iterate tz = pytz.utc start = datetime_tz.datetime_tz.smartparse("2008/05/12 11:45", tz) end = datetime_tz.datetime_tz.smartparse("2008/05/16 11:46", tz) result = [] for dt in iterate.between(start, datetime_tz.timedelta(days=1), end): result.append(dt.strftime("%Y/%m/%d %H:%M")) self.assertEqual(result, ["2008/05/12 11:45", "2008/05/13 11:45", "2008/05/14 11:45", "2008/05/15 11:45", "2008/05/16 11:45"]) start = datetime_tz.datetime_tz.smartparse("2008/05/12 11:45", tz) end = datetime_tz.datetime_tz.smartparse("2008/05/16 11:45", tz) result = [] for dt in iterate.between(start, datetime_tz.timedelta(days=1), end): result.append(dt.strftime("%Y/%m/%d %H:%M")) self.assertEqual(result, ["2008/05/12 11:45", "2008/05/13 11:45", "2008/05/14 11:45", "2008/05/15 11:45"])
def json_feed(request, group): config = CONFIG.config(group) tzinfo = None if config['schedule-timezone']: tzinfo = pytz.timezone(config['schedule-timezone']) delta = datetime_tz.timedelta(seconds=int(request.GET.get('delta', 0))) two_elements = list(get_current_next(group, delta=delta)) for index, element in enumerate(two_elements): element = dict(element) for key in ('start', 'end'): element[key] = str(element[key].astimezone(tzinfo)) two_elements[index] = element return http.HttpResponse(json.dumps(two_elements), content_type='text/javascript')
def parse_pytimedelta(s): """ Parses a str(datetime.timedelta). Ignores microseconds. """ days = 0 if 'day' in s: day_index = s.index(' day') # Parse out days first days = int(s[0:day_index]) # Drop the bit before there s = s[day_index+4:] # Handle plural if s.startswith('s'): s = s[1:] # Strip out the comma assert s.startswith(', '), 'Unexpected string format' s = s[2:] # Parse out the remainder hours, minutes, seconds = (int(x) for x in s.split(':')) return timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
def parse_pytimedelta(s): """ Parses a str(datetime.timedelta). Ignores microseconds. """ days = 0 if 'day' in s: day_index = s.index(' day') # Parse out days first days = int(s[0:day_index]) # Drop the bit before there s = s[day_index + 4:] # Handle plural if s.startswith('s'): s = s[1:] # Strip out the comma assert s.startswith(', '), 'Unexpected string format' s = s[2:] # Parse out the remainder hours, minutes, seconds = (int(x) for x in s.split(':')) return timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
def testAroundDst(self): # Testing going backwards into daylight savings utc_dt = datetime_tz.datetime_tz(2002, 10, 27, 6, 10, 0, tzinfo=pytz.utc) loc_dt = utc_dt.astimezone(pytz.timezone("US/Eastern")) self.assertEqual(loc_dt.strftime(FMT), "2002-10-27 01:10:00 EST-0500") before = loc_dt - datetime_tz.timedelta(minutes=10) self.assertEqual(before.strftime(FMT), "2002-10-27 01:00:00 EST-0500") before = loc_dt - datetime_tz.timedelta(minutes=20) self.assertEqual(before.strftime(FMT), "2002-10-27 01:50:00 EDT-0400") after = loc_dt + datetime_tz.timedelta(minutes=10) self.assertEqual(after.strftime(FMT), "2002-10-27 01:20:00 EST-0500") # Testing going forwards out of daylight savings utc_dt = datetime_tz.datetime_tz(2002, 10, 27, 5, 50, 0, tzinfo=pytz.utc) loc_dt = utc_dt.astimezone(pytz.timezone("US/Eastern")) self.assertEqual(loc_dt.strftime(FMT), "2002-10-27 01:50:00 EDT-0400") after = loc_dt + datetime_tz.timedelta(minutes=10) self.assertEqual(after.strftime(FMT), "2002-10-27 01:00:00 EST-0500") after = loc_dt + datetime_tz.timedelta(minutes=20) self.assertEqual(after.strftime(FMT), "2002-10-27 01:10:00 EST-0500") before = loc_dt - datetime_tz.timedelta(minutes=10) self.assertEqual(before.strftime(FMT), "2002-10-27 01:40:00 EDT-0400") # Test going backwards out of daylight savings utc_dt = datetime_tz.datetime_tz(2002, 4, 7, 7, 10, 00, tzinfo=pytz.utc) loc_dt = utc_dt.astimezone(pytz.timezone("US/Eastern")) self.assertEqual(loc_dt.strftime(FMT), "2002-04-07 03:10:00 EDT-0400") before = loc_dt - datetime_tz.timedelta(minutes=10) self.assertEqual(before.strftime(FMT), "2002-04-07 03:00:00 EDT-0400") before = loc_dt - datetime_tz.timedelta(minutes=20) self.assertEqual(before.strftime(FMT), "2002-04-07 01:50:00 EST-0500") after = loc_dt + datetime_tz.timedelta(minutes=10) self.assertEqual(after.strftime(FMT), "2002-04-07 03:20:00 EDT-0400") # Test going forwards into daylight savings utc_dt = datetime_tz.datetime_tz(2002, 4, 7, 6, 50, 00, tzinfo=pytz.utc) loc_dt = utc_dt.astimezone(pytz.timezone("US/Eastern")) self.assertEqual(loc_dt.strftime(FMT), "2002-04-07 01:50:00 EST-0500") after = loc_dt + datetime_tz.timedelta(minutes=10) self.assertEqual(after.strftime(FMT), "2002-04-07 03:00:00 EDT-0400") after = loc_dt + datetime_tz.timedelta(minutes=20) self.assertEqual(after.strftime(FMT), "2002-04-07 03:10:00 EDT-0400") before = loc_dt - datetime_tz.timedelta(minutes=10) self.assertEqual(before.strftime(FMT), "2002-04-07 01:40:00 EST-0500")