回答編集履歴

5

補足追記

2020/11/22 01:22

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -1,6 +1,20 @@
1
1
  もはや作ってしまった方が早いです。
2
2
 
3
+
4
+
3
5
  jpholidayはメンテはされているようですが、一般的に使うライブラリである、という感じはうけません。また特別休日の追加はできるようなのですが、ベースとなる休日を削除はできなさそうなので、質問者の会社が「来週の月曜振替休日は年間の調整で出勤日にします!」みたいな状況には対応できないかもです。
6
+
7
+
8
+
9
+ また、最初は面倒ですが、このように作っておくことで、以下メリットがあると思います。
10
+
11
+ - 来年の予定の登録や、今年の日程の修正が必要になった際に、登録がやりやすい(会社の休日一覧表とか、自分の年休日とかをそのまま登録すればよく、何か変更して別の日を登録するといった、登録に頭を悩ませることは不要)
12
+
13
+ - 今後「週報の暫定版を、休日では無い週末に提出せよ!」みたいな別の要件が発生した場合に拡張がしやすい
14
+
15
+
16
+
17
+ データを、外側でファイル定義するとかは、もはや応用なので、ご自分でカスタマイズしてみてください。terateilはプログラマーの問題解決の場ですので、「完成されて後はコード見なくてもOK!といった回答」ではなく、「質問者様のコードに組み込んでどんどん拡張していただける元となる回答」を心がけました。
4
18
 
5
19
 
6
20
 

4

一部修正

2020/11/22 01:22

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -8,6 +8,14 @@
8
8
 
9
9
  class MyDateTime:
10
10
 
11
+ # Prioritize upper set of days, ignore lower duplicated elements.
12
+
13
+ # Of courese, you must register the future calendars,
14
+
15
+ # in odrder not to work on many days! :-)
16
+
17
+ special_workdays = {}
18
+
11
19
  special_holidays = {
12
20
 
13
21
  '2020-1-2', '2020-1-3', '2020-8-11', '2020-8-12', '2020-8-13', '2020-8-14',
@@ -15,8 +23,6 @@
15
23
  '2020-12-29', '2020-12-30', '2020-12-31'
16
24
 
17
25
  }
18
-
19
- special_workdays = {}
20
26
 
21
27
  national_holidays = {
22
28
 
@@ -46,13 +52,13 @@
46
52
 
47
53
  def is_workday(cls, day):
48
54
 
55
+ if day in map(cls.strptime, cls.special_workdays):
56
+
57
+ return True
58
+
49
59
  if day in map(cls.strptime, cls.special_holidays):
50
60
 
51
61
  return False
52
-
53
- if day in map(cls.strptime, cls.special_workdays):
54
-
55
- return True
56
62
 
57
63
  if day in map(cls.strptime, cls.national_holidays):
58
64
 

3

誤字の修正

2020/11/22 01:04

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  }
18
18
 
19
- special_workdays = {'2020-11-23'}
19
+ special_workdays = {}
20
20
 
21
21
  national_holidays = {
22
22
 

2

判断ロジックの修正

2020/11/22 00:41

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -6,11 +6,17 @@
6
6
 
7
7
  ```Python
8
8
 
9
- import datetime
9
+ class MyDateTime:
10
10
 
11
+ special_holidays = {
11
12
 
13
+ '2020-1-2', '2020-1-3', '2020-8-11', '2020-8-12', '2020-8-13', '2020-8-14',
12
14
 
15
+ '2020-12-29', '2020-12-30', '2020-12-31'
16
+
17
+ }
18
+
13
- class MyDateTime:
19
+ special_workdays = {'2020-11-23'}
14
20
 
15
21
  national_holidays = {
16
22
 
@@ -23,16 +29,6 @@
23
29
  '2020-11-3', '2020-11-23'
24
30
 
25
31
  }
26
-
27
- special_holidays = {
28
-
29
- '2020-1-2', '2020-1-3', '2020-8-11', '2020-8-12', '2020-8-13', '2020-8-14',
30
-
31
- '2020-12-29', '2020-12-30', '2020-12-31'
32
-
33
- }
34
-
35
- special_workdays = {}
36
32
 
37
33
 
38
34
 
@@ -50,10 +46,6 @@
50
46
 
51
47
  def is_workday(cls, day):
52
48
 
53
- if day in map(cls.strptime, cls.national_holidays):
54
-
55
- return False
56
-
57
49
  if day in map(cls.strptime, cls.special_holidays):
58
50
 
59
51
  return False
@@ -61,6 +53,10 @@
61
53
  if day in map(cls.strptime, cls.special_workdays):
62
54
 
63
55
  return True
56
+
57
+ if day in map(cls.strptime, cls.national_holidays):
58
+
59
+ return False
64
60
 
65
61
  return not (day.weekday() == 5 or day.weekday() == 6)
66
62
 

1

微修正

2020/11/22 00:38

投稿

toast-uz
toast-uz

スコア3266

test CHANGED
@@ -62,11 +62,7 @@
62
62
 
63
63
  return True
64
64
 
65
- if day.weekday() == 5 or day.weekday() == 6:
65
+ return not (day.weekday() == 5 or day.weekday() == 6)
66
-
67
- return False
68
-
69
- return True
70
66
 
71
67
 
72
68