SimpleDateFormat und monate 0 akzeptieren

Status
Nicht offen für weitere Antworten.

alaska94

Aktives Mitglied
Hallo,

ich weiß nicht wie ich es euch erklären soll, aber ich versuche es mal.

Ich brauche eine Klasse, die ein String übergeben bekommt (Das ist nicht das Problem).
In diesem String ist ein Datum drin. Dieser String soll ins SimpleDateFormat(dd.MM.yyyy) umgewandelt werden.
Ist auch nicht das Problem.
Jetzt kann es aber sein, dass das Datum wie folgt lautet 16.00.1969.
Dies ist, wenn ein Benutzer kein Datum eingegeben hast.
Das Problem ist, wenn ich das ins Dateformat umwandle, er mir folgendes ausgibt. 16.12.1968.
Er nimmt einfach dem Dezember des Vorjahres.
Er soll mir aber das Datum 16.00.1969 ins Dateformat umwandeln, und dass auch zurückgeben, gibt es da eine möglichkeit, dass er dieses Datum akzeptiert?
Ihrbraucht mir nicht die ganze Klasse schrieben, nur sagen ob es möglich ist und wo ich da ansetzen muss?

Gruß

ALaska
 
Hallo

erst einmal die Frage, warum möchtest du 0 - Monate speichern, erschließt sich mir um diese Uhrzeit lieder nicht mehr,
doch habe ich einen Lösungsansatz der der Beantwortung dieser Frage bedarf.

mfg
Drake
 
Das ist eine Schnittstelle für ein Programm, und wenn kein Datum eingetragen ist, steht halt der monat auf 0. Und es ist zwingend ein Datum erforderlich für dieses Programm. Und ich möchte kein Zufallsdatum erzeugen, sonst weiß ich ja nicht, ob es das richtige Datum ist oder nicht. WEnn du eienn Lösungsansatz hast, wäre es nett, wenn Du ihn mir mitteilen könntest.

Gruß

Alaska
 
Die Spezifikation, dass ein 0 im Monat bedeutet, das kein Datum da ist, ist etwas seltsam und ein schönes Beispiel, wie man Parameter nicht mißbrauchen sollte 😉

Warum übergibst du nicht einfach null, wenn kein Datum da ist? Oder ein konstantes Fallback Datum, wie der 1.1.1970
 
Zufallsdatum ist Blödsinn, da braucht man garnicht drüber reden, doch gibt es durchaus die Möglichkeit, ein anderes Datum als mit 0 Monaten zu filtern, z.b. wenn dein String 0 Monate hat aus diesem 2.2.2222 zu machen, oder dein Datum als String bereit halten, scheint aber nicht in deinem Interesse zu sein.

Daher die Frage wofür du es benötigst, keine Sorge, ich teile mich schon mit, doch ist es wesentlich einfacher wenn sich mir vorher der Sinn erschließt, ansonsten kann ich auch Schiffe versenken spielen und auf Glück ins leere schießen.

mfg
Drake
 
Ich muss die 0 Monate einfach akzeptieren leider.
Ich habe halt den Auftrag bekommen, dass der String aus der Datenbank in ein SimpleDateFormat umgewandet werden soll. Und wenn halt so ein Datum auftritt, wie ich oben gepostet habe, soll es einfach auch umgewandelt werden.
Was genau damit passiert weiß ich nicht, aber es ist halt die Aufgabe?

Tut mir leid, dass ich Dir nicht mehr dazu sagen kann.
 
Warum überprüfst du nicht einfach ob eine 0 geliefert wird. Falls ja erstellst du manuell einen String der so aussieht "00.00.0000" oder halt wie dein Datum formatiert werden soll!
 
Ein String geht nicht. Ich muss es leider ins SimpleDateFormat umwandeln. Eventuell selber eine Datumsklasse schreiben. Wenn ich in ein String umwandeln dürfte, wäre das ja alles kein Problem.
 
Mach doch einfach ein String#split am "." und frag den den String mit Index 1, ob er equals("00") ist und falls ja gibst du null zurück 😉
 
wenn kein Datum eingetragen ist, steht halt der monat auf 0. Und es ist zwingend ein Datum erforderlich für dieses Programm.

Merkst du nicht daß du dir da selbst widersprichst? :autsch:

Und wenn halt so ein Datum auftritt, wie ich oben gepostet habe, soll es einfach auch umgewandelt werden

Hallo!?!? Merkst du noch was? Oder besser: Merkt dein Auftraggeber noch was?

Wenn soetwas auftritt ist es nunmal kein Datum und kann demzufolge
auch nicht in ein Datum umgewandelt werden. :noe:

Auf unterster Ebene werden alle Datumsen in einem long-Value
gespeichert, der die verflossenen Millisekunden seit einem definierten Referenzzeitpunkt
angibt; da ist es gar nicht möglich, ein nicht-existentes Datum zu speichern.

(Sorry wegen der vielen Betonungen, aber das regt mich halt auf :wink: )
 
Eleganteste Lösung:

Leite dir eine eigene Klasse von GregorianCalendar ab,
die zusätzlich zum Datum noch den String selbst speichert
und ein boolean-Member wie isExistent hat und arbeite
mit dieser Klasse.
 
Leroy42 hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Es gibt nen Plural von Datum, der nicht identisch mit "Daten" ist
Wirklich? :shock: Wie heißt der denn?

Denk ma net, war eher als Frage gedacht 😉

Leroy42 hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
oder war das bewusst falsch geschrieben?
Ja, eben genau darum, weil ich das Wort Daten vermeiden wollte.

Gut, hab ich mir scho fast gedacht, aber bei dir weis ma ja nie, was du so aus deinem Duden alles rauskramst :lol:
 
Hobbit_Im_Blutrausch hat gesagt.:
Leroy42 hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Es gibt nen Plural von Datum, der nicht identisch mit "Daten" ist
Wirklich? :shock: Wie heißt der denn?

Denk ma net, war eher als Frage gedacht 😉

???:L Meine Frage war nicht ironisch; aber egal. Aus Wikipedia habe ich
mittlerweile folgendes herausgekramt

Wikipedia hat gesagt.:

Da hab' ich ja heute schon was gelernt 😀 : Plural(Datum) == Kalenderdaten
 
Leroy42 hat gesagt.:
Eleganteste Lösung:

Leite dir eine eigene Klasse von GregorianCalendar ab,
die zusätzlich zum Datum noch den String selbst speichert
und ein boolean-Member wie isExistent hat und arbeite
mit dieser Klasse.

Der Ansatz hört sich sehr brauchbar an, aber wie genau meinst Du das??
 
Die Frage ist doch was später mit dem Ding passiert. Wenn der Code dem du das Date/den Calendar übergibst nicht auf eigene Objekte mit Zusatzinformationen vorbereitet ist, dann nützt dir das alles nichts da die vorhandene Schnittstelle angesprochen wird.
Was würdest du in diesem Fall zurückgeben?
 
Also ich habe nochmal recherchiert.
Ich bekomme einen String z.B. 700600 und als Ergebnis soll ich ein DateObjekt zurückgeben dass in diesem Fall folgendes hält.

00.06.1970

Es dürfen sowohl der Tag als auch der Monat Null sein.

Gruß

Alaska
 
Ich sehe da keine Schwierigkeiten:
alaska94 hat gesagt.:
Ich habe halt den Auftrag bekommen, dass der String aus der Datenbank in ein SimpleDateFormat umgewandet werden soll.

Die Kommunikation läuft also folgendermaßen ab:

DB(Datum als String) ---> AlaskasProgramm ---> DB(Datum als String)

Die DB kennt das Datum nur als String.

Durch die eigene AlaskasCalendar wird sich der Original DB-String
plus der Information ob es sich um ein gültiges Datum handelt, gemerkt.

Egal was alaska dann mit der AlaskasCalendar-veranstaltet; er hat
immer die Möglichkeit einfach abzufragen ob es sich um ein gültiges Datum
handelt und kann, bei Rück-Speicherung in die DB, den gemerkten Original-String benutzen.
 
alaska94 hat gesagt.:
Also ich habe nochmal recherchiert.
Ich bekomme einen String z.B. 700600 und als Ergebnis soll ich ein DateObjekt zurückgeben dass in diesem Fall folgendes hält.

00.06.1970

Es dürfen sowohl der Tag als auch der Monat Null sein.
Das wird ein Date aber nicht tun, weil das ungültig ist.
 
Tipp: Mit "simpleDateFormat.setLenient(false);" bekommst du beim Parsen eine ParseException.
Die kannst du auffangen und dann mit dem ungültigen Datum machen was du willst.
 
André Uhres hat gesagt.:
Tipp: Mit "simpleDateFormat.setLenient(false);" bekommst du beim Parsen eine ParseException.
Die kannst du auffangen und dann mit dem ungültigen Datum machen was du willst.

Das ist ein guter Ansatz.
Leider hat sich der Auftrag geändert.
Ich muss jetzt ein Klasse schreiben, die alles kann, was SimpleDateFormat kann, nur hat jetzt mit der Sache, dass auch Monat und Tag 0 sein dürfen.


Gruß

Alaska
 
Was is'n das für'n komischer Auftraggeber? Weiss der was Java ist, da er über solche Einzelheiten spricht? Ich glaube kaum, daß sowas in eine Problemspezifikation gehört.
 
Es soll aber leider so gemacht werden.
Jetzt überlege ich, ob ich das einfach mit simpleDateFormat.setLenient(false) hinbekomme und die simpleDateKlasse einfach benutze und nur diese Fehlermeldung aussalte. Gruß
 
alaska94 hat gesagt.:
die alles kann, was SimpleDateFormat kann, nur hat jetzt mit der Sache, dass auch Monat und Tag 0 sein dürfen.

Auch das kann nicht gemacht werden, da SimpleDateFormat sich auf die Klasse
Calendar (oder war es Date?) stützt und die eben nur existierende Kalenderdaten
verarbeiten kann.

Wenn schon, dann muß auch die zugrundeliegende Datumsklasse erweitert werden.

Versuch' mal das deinem Chef zu erklären.
 
So jetzt bin ich es nochmal.
Wie bekomme ich es am besten hin, dass ich selber ein Datumsklasse schreibe, die nicht mit Datum, sondern mit Strings arbeitet?
Ich bekomme ein Datumsstring übergeben und die Art, wie ich dieses Datum ausgeben soll z.B.

String hilf=objekt.methode('850301','dd-MM-yyyy');

ergebnis aus hilf:

01-03-1985

anderes Beispiel:

String hilf=objekt.methode('850301','yy/MM/dd');

ergebnis aus hilf:

85/03/01

So etwas muss ich programmieren, wer hat den besten Ansatz?
 
2 Möglichkeiten:

1. Du hast eine überschaubare Menge von Formaten ("dd-MM-yyyy", "yy/MM/dd"', "dd.MM.yyyy")
2. Du mußt sämtliche Formatierungs Möglichkeiten exakt zur Verfügung stellen.

zu 1)

Bastel' dir eine Methode, die mit indexOf die Positionen der Platzhalter im Format-String
findet und einen String liefert, der an den entsprechenden Stellen die Werte einträgt.

zu 2)

Bevor ich das vollständig neu implementiere, würde ich die Originalquellen
der Format-Methoden (mit Copyright-Info) kopieren und einer eigenen Datums-Klasse,
die auch mit Nullen als Tag oder Monat klarkommt, anpassen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben