回答編集履歴

4

Calendarのまま判定する方法

2017/09/16 15:45

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -135,3 +135,55 @@
135
135
  }
136
136
 
137
137
  ```
138
+
139
+
140
+
141
+ 今更追加(17/09/17)。
142
+
143
+ - 日付比較するメソッドを作る
144
+
145
+ ```java
146
+
147
+ public boolean getFlg() throws ParseException {
148
+
149
+
150
+
151
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
152
+
153
+ Date startDate = sdf.parse("2007-01-01");
154
+
155
+ Date endDate = sdf.parse("2017-05-26");
156
+
157
+
158
+
159
+ Calendar from = Calendar.getInstance(),
160
+
161
+ today = Calendar.getInstance(),
162
+
163
+ to = Calendar.getInstance();
164
+
165
+ from.setTime(startDate);
166
+
167
+ to.setTime(endDate);
168
+
169
+
170
+
171
+ return compareByDate(from, today) <= 0 && compareByDate(today, to) <= 0;
172
+
173
+ }
174
+
175
+
176
+
177
+ public static int compareByDate(Calendar c1, Calendar c2) {
178
+
179
+ int i = Integer.compare(c1.get(Calendar.YEAR), c2.get(Calendar.YEAR));
180
+
181
+ if (i != 0) return i;
182
+
183
+ return Integer.compare(c1.get(Calendar.DAY_OF_YEAR), c2.get(Calendar.DAY_OF_YEAR));
184
+
185
+ }
186
+
187
+ ```
188
+
189
+

3

修正

2017/09/16 15:45

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- return diff1 >= 0 && diff2 >= 0;
41
+ return diff1 >= 0 && diff2 > 0;
42
42
 
43
43
  }
44
44
 
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- return startDate <= now && now <= endDate;
67
+ return startDate <= now && now < endDate;
68
68
 
69
69
  }
70
70
 

2

現在時刻関係のDateの処理が意味なかったので削除

2017/05/26 04:16

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -16,8 +16,6 @@
16
16
 
17
17
  Date endDate = sdf.parse("2017-05-26");
18
18
 
19
- Date now = new Date();
20
-
21
19
 
22
20
 
23
21
  Calendar from = Calendar.getInstance(),
@@ -27,8 +25,6 @@
27
25
  to = Calendar.getInstance();
28
26
 
29
27
  from.setTime(startDate);
30
-
31
- today.setTime(now);
32
28
 
33
29
  to.setTime(endDate);
34
30
 

1

不要な例外宣言を削除、方法をもう一つ追加\(long値比較\)

2017/05/26 02:50

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -48,13 +48,43 @@
48
48
 
49
49
  ```
50
50
 
51
+
52
+
53
+ - getTime()で得られるlong値で比較。その際に終了日時のほうに1日相当のミリ秒を加算する
54
+
55
+ ```java
56
+
57
+ public boolean getFlg() throws ParseException {
58
+
59
+
60
+
61
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
62
+
63
+ long startDate = sdf.parse("2007-01-01").getTime();
64
+
65
+ long endDate = sdf.parse("2017-05-26").getTime() + 24L * 60L * 60L * 1000L;
66
+
67
+ long now = new Date().getTime();
68
+
69
+
70
+
71
+ return startDate <= now && now <= endDate;
72
+
73
+ }
74
+
75
+ ```
76
+
77
+
78
+
79
+
80
+
51
81
  - 逆転の発想。文字列に変換して比較する
52
82
 
53
83
  日付の後先と文字列化した日付の後先は一致する
54
84
 
55
85
  ```java
56
86
 
57
- public boolean getFlg() throws ParseException {
87
+ public boolean getFlg() {
58
88
 
59
89
 
60
90
 
@@ -86,7 +116,7 @@
86
116
 
87
117
  ```java
88
118
 
89
- public boolean getFlg() throws ParseException {
119
+ public boolean getFlg() {
90
120
 
91
121
 
92
122