1124 datemask Datum formatieren
Kategorie:Datum
Klasse:schwer
Eingabe:siehe Spez
Ausgabe:siehe Spez
Abzugebende Files: datemask.txt, datemask.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 Integer-Zahlen ein, wobei das Jahr vierstellig zu interpretieren ist (ein Jahr<100 soll NICHT automatisch in das 20. Jahrhundert verlegt werden; 1 1 94 = graue Vorzeit).

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 (an beliebigen Stellen) 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 drei Zahlen vom Typ Integer ein, die in der Reihenfolge Tag, Monat, Jahr zu interpretieren sind. 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.

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
20 10 1989 DD_MM_YYYY

29 02 1971 DD/MON/YY

Ausgabedaten
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 datemask < datemask.i1 > datemask.out1

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