aboutsummaryrefslogtreecommitdiff
path: root/challenge-259/spadacciniweb/python
diff options
context:
space:
mode:
authorDave Jacoby <jacoby.david@gmail.com>2024-03-06 12:20:54 -0500
committerGitHub <noreply@github.com>2024-03-06 12:20:54 -0500
commitc2236d751700d5f259791a9218696e934c6bebdc (patch)
tree49838dee91b2ad0a2c5b22ad8de0937bd68d6111 /challenge-259/spadacciniweb/python
parentdd68c49c478d198ce7f22ec6961fe4d0bb77376e (diff)
parent38ae28aaeacfc9dd53e892f94d5e83d4a83395d2 (diff)
downloadperlweeklychallenge-club-c2236d751700d5f259791a9218696e934c6bebdc.tar.gz
perlweeklychallenge-club-c2236d751700d5f259791a9218696e934c6bebdc.tar.bz2
perlweeklychallenge-club-c2236d751700d5f259791a9218696e934c6bebdc.zip
Merge branch 'manwar:master' into master
Diffstat (limited to 'challenge-259/spadacciniweb/python')
-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)