diff options
Diffstat (limited to 'challenge-259/spadacciniweb/python/ch-1.py')
| -rw-r--r-- | challenge-259/spadacciniweb/python/ch-1.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/challenge-259/spadacciniweb/python/ch-1.py b/challenge-259/spadacciniweb/python/ch-1.py new file mode 100644 index 0000000000..23cedaa661 --- /dev/null +++ b/challenge-259/spadacciniweb/python/ch-1.py @@ -0,0 +1,54 @@ +# Task 1: Banking Day Offset +# Submitted by: Lee Johnson +# +# You are given a start date and offset counter. Optionally you also get bank holiday date list. +# +# Given a number (of days) and a start date, return the number (of days) adjusted to take into account non-banking days. In other words: convert a banking day offset to a calendar day offset. +# +# Non-banking days are: +# a) Weekends +# b) Bank holidays +# +# Example 1 +# Input: $start_date = '2018-06-28', $offset = 3, $bank_holidays = ['2018-07-03'] +# Output: '2018-07-04' +# +# Thursday bumped to Wednesday (3 day offset, with Monday a bank holiday) +# +# Example 2 +# Input: $start_date = '2018-06-28', $offset = 3 +# Output: '2018-07-03' + +from dateutil.parser import * +import datetime + +def banking_day_offset(start_date, offset, bank_holidays): + dt = parse(start_date, dayfirst = False, yearfirst = True) + + for i in range(1,5): + dt += datetime.timedelta(days=1) + while no_banking_day(dt): + dt += datetime.timedelta(days=1) + + print("(start %s offset %s Bank holidays [%s]) -> %s" % + (start_date, offset, + ' / '.join(bank_holidays), + dt.strftime('%Y-%m-%d') + ) + ) + +def no_banking_day(dt): + if (dt.weekday() >= 6) or (dt.strftime('%Y-%m-%d') in bank_holidays): + return 1 + return 0 + +if __name__ == "__main__": + start_date = '2018-06-28' + offset = 3 + bank_holidays = ['2018-07-03'] + banking_day_offset(start_date, offset, bank_holidays) + + start_date = '2018-06-28'; + offset = 3; + bank_holidays = []; + banking_day_offset(start_date, offset, bank_holidays) |
