Coverage for /var/devmt/py/utils4_1.8.0/utils4/timedelta.py: 100%
24 statements
« prev ^ index » next coverage.py v7.6.9, created at 2025-08-26 21:39 +0100
« prev ^ index » next coverage.py v7.6.9, created at 2025-08-26 21:39 +0100
1# -*- coding: utf-8 -*-
2r"""
3:Purpose: This module handles the time delta calculations.
5 Essentially, this module is a soft wrapper around the
6 :func:`pandas.DateOffset` class, which handles the time delta
7 calculations.
9:Developer: J Berendt
10:Email: support@s3dev.uk
12:Comments: n/a
14:Example:
16 Calculate five months into the future::
18 >>> from datetime import datetime as dt # Imported for demonstration only
19 >>> from utils4.timedelta import timedelta
21 >>> origin = dt.now()
22 >>> result = timedelta(origin=origin, unit='m', value=5)
24 >>> print(f'Origin: {origin}', f'Result: {result}', sep='\n')
25 Origin: 2022-03-23 14:45:58.974822
26 Result: 2022-08-23 14:45:58.974822
29 Calculate 55 minutes into the past::
31 >>> from datetime import datetime as dt # Imported for demonstration only
32 >>> from utils4.timedelta import timedelta
34 >>> origin = dt.now()
35 >>> result = timedelta(origin=origin, unit='M', value=-55)
37 >>> print(f'Origin: {origin}', f'Result: {result}', sep='\n')
38 Origin: 2022-03-23 14:48:43.566826
39 Result: 2022-03-23 13:53:43.566826
42 Calculate 15 months into the past::
44 >>> from datetime import datetime as dt # Imported for demonstration only
45 >>> from utils4.timedelta import timedelta
47 >>> origin = dt.now()
48 >>> result = timedelta(origin=origin, unit='m', value=-15)
50 >>> print(f'Origin: {origin}', f'Result: {result}', sep='\n')
51 Origin: 2022-03-23 14:48:59.531170
52 Result: 2020-12-23 14:48:59.531170
54"""
56import pandas as pd
57try:
58 from .reporterror import reporterror
59except ImportError:
60 from utils4.reporterror import reporterror
63def timedelta(origin, unit, value):
64 """Calculate the time delta, of a given unit, from the original value.
66 Args:
67 origin (datetime.datetime): Original datetime on which the
68 time delta is to be calculated.
69 unit (str): Time unit to be used. Valid options are:
71 - ``'S'``: seconds
72 - ``'M'``: minutes
73 - ``'H'``: hours
74 - ``'d'``: days
75 - ``'w'``: weeks
76 - ``'m'``: months
77 - ``'y'``: years
79 value (int): Value of the delta. Can be either a positive or negative
80 integer.
82 Raises:
83 ValueError: If the unit provided is invalid.
85 Returns:
86 datetime.datetime: A ``datetime.datetime`` object of the calculated
87 result.
89 """
90 units = ['S', 'M', 'H', 'd', 'w', 'm', 'y']
91 if not unit in units:
92 raise ValueError(f'Invalid unit. Valid units are: {", ".join(units)}\n'
93 'Seconds through years, respectively.')
94 try:
95 new = None
96 if unit == 'S':
97 new = origin + pd.DateOffset(seconds=value)
98 elif unit == 'M':
99 new = origin + pd.DateOffset(minutes=value)
100 elif unit == 'H':
101 new = origin + pd.DateOffset(hours=value)
102 elif unit == 'd':
103 new = origin + pd.DateOffset(days=value)
104 elif unit == 'w':
105 new = origin + pd.DateOffset(weeks=value)
106 elif unit == 'm':
107 new = origin + pd.DateOffset(months=value)
108 elif unit == 'y':
109 new = origin + pd.DateOffset(years=value)
110 except Exception as err:
111 reporterror(err)
112 return new