Cześć, to jest treść zadania:
Zadanie 3. Kalendarz (max 5 punktów)
Napisać program który tworzy "kalendarz:". Użytkownik podaje w jednym dialogu showInputDialog datę "od" i datę "do" rozdzielone spacjami, a program wypisuje listę dat wraz ze skrótami nazw dni tygodnia w pokazanje dalej postaci.
Przykład:
po podaniu w dialogu napisu:
2010-12-17 2010-12-20
program wyprowadza:
17.12.2010 Pt
18.12.2010 So
19.12.2010 N
20.12.2010 Pn
Format wejścia i wyjścia (pokazany w przykładzie) jest obowiązkowy.
Należy obsłużyć niewłaściwe daty poprzez wyprowadzenie informacji o błędzie (jaki napis nie może być zinterpretowany jako włąsciwa data) i zakończenie programu.
Podpowiedź: zob. metodę setLenient z klasy Calendar, użyj Formattera, nie używaj wyrażeń regularnych (bo będzie łatwiej).
Tu rozwiązanie za które dostałem 0 punktów i o ile obsługa wyjątków to zwykłe przeoczenie (miałem ciężki miesiąc zapomniałem dokończyć) to nie mam pomysłu jak zrobić, żeby po podaniu daty w styczniu nie wywalało błędu. Ktoś ma jakiś pomysł?
KOD:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Main {
@SuppressWarnings("resource")
public static void main(String[] args) {
String setDates = JOptionPane.showInputDialog(null,
"Podaj datę \"od\" i datę \"do\"");
Scanner scan = null;
scan = new Scanner(setDates).useDelimiter("[^0-9]+");
int startDateYear = scan.nextInt();
int startDateMonth = (scan.nextInt() - 1);
int startDateDay = scan.nextInt();
int endDateYear = scan.nextInt();
int endDateMonth = (scan.nextInt() - 1);
int endDateDay = scan.nextInt();
scan.close();
String startDateInString = startDateYear + "-" + startDateMonth + "-"
+ startDateDay;
String endDateInString = endDateYear + "-" + endDateMonth + "-"
+ endDateDay;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setLenient(false);
try {
formatter.parse(startDateInString);
formatter.parse(endDateInString);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar startDate = Calendar.getInstance();
startDate.set(startDateYear, startDateMonth, startDateDay);
Calendar endDate = Calendar.getInstance();
endDate.set(endDateYear, endDateMonth, endDateDay);
SimpleDateFormat formatter2 = new SimpleDateFormat("dd.MM.yyyy EEE");
for (int i = 0; !(startDate.equals(endDate)); i = 1) {
startDate.add(Calendar.DAY_OF_MONTH, i);
String formatted2 = formatter2.format(startDate.getTime());
System.out.println(formatted2);
}
}
}