###実現したいこと
Javaの初心者です。
ログ解析用のツールを作成しているのですが、
標準入力から入力された日時が以下のいづれかの形式でなければエラーとなり、もう一度標準入力を求めるメッセージを出力させたいです。
yyyy/MM/dd
yyyy/MM/dd-hh
yyyy/MM/dd-hh:mm
yyyy/MM/dd-hh:mm:ss
SimpleDateFormatを使用して判定する方法を教えていただきたいです。
また、存在しない日時のとき、開始日時が終了日時より大きい時もエラーとしたいです。
現在作成中ですが、日時フォーマットを、例えば「yyyy/MM/dd-hh」で入力した場合もエラーとなってしまいます。
修正方法を教えていただきたいです。また、ソースコードにおかしいところがあれば教えていただきたいです。
##ソースコード
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class Execute {
private static final int OK = 0; private static final int ERROR_DATE_FORMAT = 1; private static final int ERROR_DATE_NO_EXIST = 2; private static final int ERROR_DATE_START_TO_END = 3; public static void main(String[] args) { System.out.println("開始日時を入力してください。"); Scanner scan = new Scanner(System.in); String startTime = scan.next(); if (CheckDate(startTime) == ERROR_DATE_FORMAT) { System.out.println("日時の形式が正しくありません。もう一度入力してください。"); } if (CheckDate(startTime) == ERROR_DATE_NO_EXIST) { System.out.println("存在しない日時が入力されています。"); } if (CheckDate(startTime) == OK) { System.out.println("終了日時を入力してください。"); //終了日時を入力する処理を記載する。 } scan.close(); } private static int CheckDate(String startTime) { final String FORMAT1 = "^[0-9][4]/[01]?[0-9]/[0123]?[0-9]$"; final String FORMAT2 = "^[0-9][4]/[01]?[0-9]/[0123]?[0-9]-([01]?[0-9]|[2]?[0-3])$"; final String FORMAT3 = "^[0-9]{4}/[01]?[0-9]/[0123]?[0-9]-([01]?[0-9]|[2]?[0-3]):([0-5]?[0-9])$"; 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])$"; long startTimes; //long endTime; //while (true) { SimpleDateFormat format = null; if (startTime.matches(FORMAT1)) { format = new SimpleDateFormat("yyyy/MM/dd"); } else if (startTime.matches(FORMAT2)) { format = new SimpleDateFormat("yyyy/MM/dd-hh"); } else if (startTime.matches(FORMAT3)) { format = new SimpleDateFormat("yyyy/MM/dd-hh:mm"); } else if (startTime.matches(FORMAT4)) { format = new SimpleDateFormat("yyyy/MM/dd-hh:mm:ss"); } else { return ERROR_DATE_FORMAT; // System.out.println("日時の形式が正しくありません。もう一度入力してください。"); // continue; } try { format.setLenient(false); startTimes = format.parse(startTime).getTime(); } catch (ParseException e) { return ERROR_DATE_NO_EXIST; // System.out.println("存在しない日時が入力されています。"); // continue; } // break; return OK; }
}
##現在の問題点
・yyyy/MM/dd
yyyy/MM/dd-hh のフォーマットの場合もエラーとなってしまう。
・15行目などの
System.out.println("日時の形式が正しくありません。もう一度入力してください。");
のあとにもう一度標準入力を再開する方法がわからない。
##エラー種類
・日時の形式が正しくありません。もう一度入力してください。
・存在しない日時が入力されています。もう一度入力してください。
・開始日時>終了日時となっています。もう一度入力してください。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/03 12:33