質問編集履歴

1

問題点を明確にしました。また、現在のソースコードも記載しました。

2016/05/03 02:38

投稿

Hyonta
Hyonta

スコア36

test CHANGED
File without changes
test CHANGED
@@ -20,29 +20,173 @@
20
20
 
21
21
  また、存在しない日時のとき、開始日時が終了日時より大きい時もエラーとしたいです。
22
22
 
23
+ 現在作成中ですが、日時フォーマットを、例えば「yyyy/MM/dd-hh」で入力した場合もエラーとなってしまいます。
24
+
23
- ご迷惑をおかます、よろしくお願致します。
25
+ 修正方法教えていただきたいです。また、ソースコードにおかしいところあれば教えてただきたいです。
24
26
 
25
27
 
26
28
 
27
- ##実行例
29
+ ##ソースコード
28
30
 
29
- 起動
31
+ import java.io.File;
30
32
 
31
-
33
+ import java.text.ParseException;
32
34
 
33
- 開始日時を入力してください。
35
+ import java.text.SimpleDateFormat;
34
36
 
35
- (ここに入力)
36
-
37
-
38
-
39
- 終了日時を入力してください。
37
+ import java.util.Scanner;
40
-
41
- (ここに入力)
42
38
 
43
39
 
44
40
 
41
+ public class Execute {
42
+
43
+
44
+
45
+ private static final int OK = 0;
46
+
47
+ private static final int ERROR_DATE_FORMAT = 1;
48
+
49
+ private static final int ERROR_DATE_NO_EXIST = 2;
50
+
51
+ private static final int ERROR_DATE_START_TO_END = 3;
52
+
53
+
54
+
55
+ public static void main(String[] args) {
56
+
57
+
58
+
59
+ System.out.println("開始日時を入力してください。");
60
+
61
+ Scanner scan = new Scanner(System.in);
62
+
63
+ String startTime = scan.next();
64
+
65
+
66
+
67
+ if (CheckDate(startTime) == ERROR_DATE_FORMAT) {
68
+
69
+ System.out.println("日時の形式が正しくありません。もう一度入力してください。");
70
+
71
+ }
72
+
73
+ if (CheckDate(startTime) == ERROR_DATE_NO_EXIST) {
74
+
75
+ System.out.println("存在しない日時が入力されています。");
76
+
77
+ }
78
+
79
+ if (CheckDate(startTime) == OK) {
80
+
81
+ System.out.println("終了日時を入力してください。");
82
+
83
+ //終了日時を入力する処理を記載する。
84
+
85
+ }
86
+
87
+ scan.close();
88
+
89
+ }
90
+
91
+
92
+
93
+ private static int CheckDate(String startTime) {
94
+
95
+
96
+
97
+ final String FORMAT1 = "^[0-9][4]/[01]?[0-9]/[0123]?[0-9]$";
98
+
99
+ final String FORMAT2 = "^[0-9][4]/[01]?[0-9]/[0123]?[0-9]-([01]?[0-9]|[2]?[0-3])$";
100
+
101
+ final String FORMAT3 = "^[0-9]{4}/[01]?[0-9]/[0123]?[0-9]-([01]?[0-9]|[2]?[0-3]):([0-5]?[0-9])$";
102
+
103
+ final String FORMAT4 = "^[0-9]{4}/[01]?[0-9]/[0123]?[0-9]-([01]?[0-9]|[2]?[0-3]):([0-5]?[0-9]):([0-5]?[0-9])$";
104
+
105
+ long startTimes;
106
+
107
+ //long endTime;
108
+
109
+
110
+
111
+ //while (true) {
112
+
113
+
114
+
115
+ SimpleDateFormat format = null;
116
+
117
+ if (startTime.matches(FORMAT1)) {
118
+
119
+ format = new SimpleDateFormat("yyyy/MM/dd");
120
+
121
+ } else if (startTime.matches(FORMAT2)) {
122
+
123
+ format = new SimpleDateFormat("yyyy/MM/dd-hh");
124
+
125
+ } else if (startTime.matches(FORMAT3)) {
126
+
127
+ format = new SimpleDateFormat("yyyy/MM/dd-hh:mm");
128
+
129
+ } else if (startTime.matches(FORMAT4)) {
130
+
131
+ format = new SimpleDateFormat("yyyy/MM/dd-hh:mm:ss");
132
+
133
+ } else {
134
+
135
+ return ERROR_DATE_FORMAT;
136
+
137
+ // System.out.println("日時の形式が正しくありません。もう一度入力してください。");
138
+
139
+ // continue;
140
+
141
+ }
142
+
143
+
144
+
145
+ try {
146
+
147
+ format.setLenient(false);
148
+
149
+ startTimes = format.parse(startTime).getTime();
150
+
151
+ } catch (ParseException e) {
152
+
153
+ return ERROR_DATE_NO_EXIST;
154
+
155
+ // System.out.println("存在しない日時が入力されています。");
156
+
157
+ // continue;
158
+
159
+ }
160
+
161
+ // break;
162
+
163
+ return OK;
164
+
165
+ }
166
+
167
+ }
168
+
169
+
170
+
171
+ ##現在の問題点
172
+
173
+
174
+
175
+ ・yyyy/MM/dd
176
+
177
+ yyyy/MM/dd-hh のフォーマットの場合もエラーとなってしまう。
178
+
179
+
180
+
181
+ ・15行目などの
182
+
183
+ System.out.println("日時の形式が正しくありません。もう一度入力してください。");
184
+
185
+ のあとにもう一度標準入力を再開する方法がわからない。
186
+
187
+
188
+
45
- ##エラー内容
189
+ ##エラー種類
46
190
 
47
191
  ・日時の形式が正しくありません。もう一度入力してください。
48
192