teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

Calendarのまま判定する方法

2017/09/16 15:45

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -66,4 +66,29 @@
66
66
 
67
67
  return diff1 >= 0 && diff2 >= 0;
68
68
  }
69
- ```
69
+ ```
70
+
71
+ 今更追加(17/09/17)。
72
+ - 日付比較するメソッドを作る
73
+ ```java
74
+ public boolean getFlg() throws ParseException {
75
+
76
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
77
+ Date startDate = sdf.parse("2007-01-01");
78
+ Date endDate = sdf.parse("2017-05-26");
79
+
80
+ Calendar from = Calendar.getInstance(),
81
+ today = Calendar.getInstance(),
82
+ to = Calendar.getInstance();
83
+ from.setTime(startDate);
84
+ to.setTime(endDate);
85
+
86
+ return compareByDate(from, today) <= 0 && compareByDate(today, to) <= 0;
87
+ }
88
+
89
+ public static int compareByDate(Calendar c1, Calendar c2) {
90
+ int i = Integer.compare(c1.get(Calendar.YEAR), c2.get(Calendar.YEAR));
91
+ if (i != 0) return i;
92
+ return Integer.compare(c1.get(Calendar.DAY_OF_YEAR), c2.get(Calendar.DAY_OF_YEAR));
93
+ }
94
+ ```

3

修正

2017/09/16 15:45

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  int diff1 = today.compareTo(from);
19
19
  int diff2 = to.compareTo(today);
20
20
 
21
- return diff1 >= 0 && diff2 >= 0;
21
+ return diff1 >= 0 && diff2 > 0;
22
22
  }
23
23
  ```
24
24
 
@@ -31,7 +31,7 @@
31
31
  long endDate = sdf.parse("2017-05-26").getTime() + 24L * 60L * 60L * 1000L;
32
32
  long now = new Date().getTime();
33
33
 
34
- return startDate <= now && now <= endDate;
34
+ return startDate <= now && now < endDate;
35
35
  }
36
36
  ```
37
37
 

2

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

2017/05/26 04:16

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -7,13 +7,11 @@
7
7
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
8
8
  Date startDate = sdf.parse("2007-01-01");
9
9
  Date endDate = sdf.parse("2017-05-26");
10
- Date now = new Date();
11
10
 
12
11
  Calendar from = Calendar.getInstance(),
13
12
  today = Calendar.getInstance(),
14
13
  to = Calendar.getInstance();
15
14
  from.setTime(startDate);
16
- today.setTime(now);
17
15
  to.setTime(endDate);
18
16
  to.add(Calendar.DATE, 1); //終了日時を翌日に
19
17
 

1

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

2017/05/26 02:50

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -23,10 +23,25 @@
23
23
  return diff1 >= 0 && diff2 >= 0;
24
24
  }
25
25
  ```
26
+
27
+ - getTime()で得られるlong値で比較。その際に終了日時のほうに1日相当のミリ秒を加算する
28
+ ```java
29
+ public boolean getFlg() throws ParseException {
30
+
31
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
32
+ long startDate = sdf.parse("2007-01-01").getTime();
33
+ long endDate = sdf.parse("2017-05-26").getTime() + 24L * 60L * 60L * 1000L;
34
+ long now = new Date().getTime();
35
+
36
+ return startDate <= now && now <= endDate;
37
+ }
38
+ ```
39
+
40
+
26
41
  - 逆転の発想。文字列に変換して比較する
27
42
  日付の後先と文字列化した日付の後先は一致する
28
43
  ```java
29
- public boolean getFlg() throws ParseException {
44
+ public boolean getFlg() {
30
45
 
31
46
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
32
47
  String startDate = "2007-01-01";
@@ -42,7 +57,7 @@
42
57
 
43
58
  - [LocalDate](https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDate.html)を使用(Java8以降限定)
44
59
  ```java
45
- public boolean getFlg() throws ParseException {
60
+ public boolean getFlg() {
46
61
 
47
62
  LocalDate startDate = LocalDate.parse("2007-01-01");
48
63
  LocalDate endDate = LocalDate.parse("2017-05-26");