aboutsummaryrefslogtreecommitdiff
path: root/challenge-259/spadacciniweb/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-259/spadacciniweb/python/ch-1.py')
-rw-r--r--challenge-259/spadacciniweb/python/ch-1.py54
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)