示例#1
0
 def test_apply_negative_delta(self):
     """Test adding months to a date."""
     self.assertEqual(datetime(2012, 1, 10), date.apply_month_delta(datetime(2012, 3, 10), -2))
     self.assertEqual(datetime(2012, 1, 31), date.apply_month_delta(datetime(2012, 3, 31), -2))
     self.assertEqual(datetime(2012, 2, 29), date.apply_month_delta(datetime(2012, 3, 31), -1))
     self.assertEqual(datetime(2012, 3, 2), date.apply_month_delta(datetime(2012, 3, 31), -1,
                      add_overlap=True))
 def test_apply_negative_delta(self):
     """Test adding months to a date."""
     self.assertEqual(datetime(2012, 1, 10), date.apply_month_delta(datetime(2012, 3, 10), -2))
     self.assertEqual(datetime(2012, 1, 31), date.apply_month_delta(datetime(2012, 3, 31), -2))
     self.assertEqual(datetime(2012, 2, 29), date.apply_month_delta(datetime(2012, 3, 31), -1))
     self.assertEqual(datetime(2012, 3, 2), date.apply_month_delta(datetime(2012, 3, 31), -1,
                      add_overlap=True))
示例#3
0
def str2time(string: str, timestamp=None) -> datetime.timedelta:
    """
    Return a timedelta for a shorthand duration.

    :param string: a string defining a time period:

    Examples::

        300s - 300 seconds
        36h - 36 hours
        7d - 7 days
        2w - 2 weeks (14 days)
        1y - 1 year

    :param timestamp: a timestamp to calculate a more accurate duration offset
        used by years
    :type timestamp: datetime.datetime
    :return: the corresponding timedelta object
    """
    key, duration = checkstr(string)

    if duration.isdigit():
        duration = int(duration)
    else:
        key = ''

    if key in ['d', 's', 'h', 'w']:  # days, seconds, hours, weeks
        return datetime.timedelta(**{MW_KEYS[key]: duration})

    if key == 'y':  # years
        days = math.ceil(duration * 365.25)
        duration *= 12
    else:
        raise MalformedConfigError(
            'Unrecognized parameter in template: {}'.format(string))

    if timestamp:
        return apply_month_delta(timestamp.date(),
                                 month_delta=duration) - timestamp.date()
    return datetime.timedelta(days=days)
示例#4
0
def str2time(string, timestamp=None):
    """
    Return a timedelta for a shorthand duration.

    @param string: a string defining a time period:
        300s - 300 seconds
        36h - 36 hours
        7d - 7 days
        2w - 2 weeks (14 days)
        1y - 1 year
    @type string: str
    @param timestamp: a timestamp to calulate a more accurate duration offset
        used by years
    @type timestamp: datetime.datetime
    @return: the corresponding timedelta object
    @rtype: datetime.timedelta
    """
    key, duration = checkstr(string)

    if duration.isdigit():
        duration = int(duration)
    else:
        key = ''

    if key in ['d', 's', 'h', 'w']:  # days, seconds, hours, weeks
        return datetime.timedelta(**{MW_KEYS[key]: duration})

    if key == 'y':  # years
        days = math.ceil(duration * 365.25)
        duration *= 12
    else:
        raise MalformedConfigError(
            'Unrecognized parameter in template: {0}'.format(string))

    if timestamp:
        return apply_month_delta(
            timestamp.date(), month_delta=duration) - timestamp.date()
    else:
        return datetime.timedelta(days=days)