1106 maskdate Datum formatieren
Kategorie:Datum
Klasse:schwer
Eingabe:Strings
Ausgabe:siehe Spez
Abzugebende Files: maskdate.txt, maskdate.java

Kurzbeschreibung:

Ein Datum und ein Formatstring werden eingelesen; das Datum wird entsprechend des Strings formatiert und ausgegeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie Tag, Monat und Jahr des Datums als String im Format TT/MM/JJJJ oder TT-MM-YYYY ein. Weiters wird ein Formatstring eingelesen, der aus folgenden Platzhaltern bestehen kann:

DD Tag des Monats zweistellig (01 - 31)
DAY Wochentagsname (englisch)
MM Monat als Zahl zweistellig (01 - 12)
MON Monat englisch, auf 3 Zeichen abgekürzt
MONTH Monat englisch, ausgeschrieben
YY Jahr zweistellig (die letzten 2 Stellen)
YYYY Jahr vierstellig

Platzhalter koennen innerhalb einer Formatiertung auch mehrfach auftreten (z.B.: DD/DD/DD)

Um Unklarheiten zu vermeiden, hier die englischen Wochentags- und Monatsnamen:

MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY
JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY AUGUST SEPTEMBER OCTOBER NOVEMBER DECEMBER
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

Weiters dürfen im Formatstring folgende Trennzeichen vorkommen: / . _ -

Ihr Programm soll das eingelesene Datum entsprechend des Formatstrings aufbereiten und ausgeben.

Für die Ermittlung des Wochentages können Sie folgende Formel benutzen; diese liefert den Wochentag des 1. Jänner eines gegebenen Jahres. Daraus können Sie dann den Wochentag des gegebenen Datums ermitteln.

Wochentag 1.1. = (Jahr + floor((Jahr-1)/4) - floor((Jahr-1)/100) + floor((Jahr-1)/400)) mod 7

wobei floor(x) für die größte ganze Zahl <= x steht.

Diese Formel liefert 0 für Sonntag, 1 für Montag, ... , 6 für Samstag.

Eingabedaten:

Lesen Sie Tag, Monat und Jahr des Datums als String im Format TT/MM/JJJJ oder TT-MM-JJJJ ein. Dabei müssen Tag und Monat zweistellig, das Jahr vierstellig, eventuell mit führenden Nullen (z.B. 01/01/1992), vorliegen. Beide Trennzeichen müssen identisch sein. Prüfen Sie das eingebene Datum auf Gültigkeit. (Es gibt z.B. keinen 31. April).

Lesen Sie weiters den Formatstring ein, der nur aus den oben genannten Platzhaltern und Trennzeichen bestehen darf.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm die Platzhalter im Formatstring durch die aktuellen Werte laut eingelesenem Datum ersetzen und den so entstehenden String ausgeben, danach einen Zeilenvorschub.

Wochentags- und Monatsnamen sind in Großbuchstaben auszugeben.

Das Unterstreichungszeichen ("_") als Trennzeichen soll in der Ausgabe durch ein Leerzeichen ersetzt werden.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Sind die eingegebenen Daten inhaltlich nicht korrekt , so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
13-04-1993 DD.MONTH_YYYY

20/10/1989 DD_MM_YYYY

29/02.1971 DD/MON/YY

Ausgabedaten
13.APRIL 1993

20 10 1989

FALSCHE EINGABE

Bemerkung: Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java maskdate < maskdate.i1 > maskdate.out1

Das erzeugte File maskdate.out1 können Sie dann mit dem mitgelieferten Outputfile maskdate.o1 vergleichen.