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
 

Drake

Bekanntes Mitglied
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
 
G

Guest

Gast
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
 

Lim_Dul

Top Contributor
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
 

Drake

Bekanntes Mitglied
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
 

alaska94

Aktives Mitglied
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.
 

The_S

Top Contributor
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!
 

alaska94

Aktives Mitglied
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.
 

DaKo

Bekanntes Mitglied
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 ;)
 

Leroy42

Top Contributor
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: )
 

Leroy42

Top Contributor
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.
 

The_S

Top Contributor
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:
 

Leroy42

Top Contributor
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 :D : Plural(Datum) == Kalenderdaten
 

alaska94

Aktives Mitglied
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??
 

Wildcard

Top Contributor
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?
 

alaska94

Aktives Mitglied
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
 

Leroy42

Top Contributor
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.
 

Wildcard

Top Contributor
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.
 

André Uhres

Top Contributor
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.
 

alaska94

Aktives Mitglied
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
 

André Uhres

Top Contributor
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.
 

alaska94

Aktives Mitglied
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ß
 

Leroy42

Top Contributor
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.
 
G

Guest

Gast
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?
 

Leroy42

Top Contributor
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.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M SimpleDateFormat, falsches Jahr Java Basics - Anfänger-Themen 3
N SimpleDateFormat & GregorianCalender Java Basics - Anfänger-Themen 9
M String in Datum umwandeln mit SimpleDateFormat Java Basics - Anfänger-Themen 3
D DateTimeFormatter / SimpleDateFormat.. Java Basics - Anfänger-Themen 4
R Erste Schritte Arbeitszeit Zähler bzw Feierabend Uhr | GregorianCalendar | SimpleDateFormat| Java Basics - Anfänger-Themen 3
G am/pm mit SimpleDateFormat Java Basics - Anfänger-Themen 3
M problem mit simpledateformat Java Basics - Anfänger-Themen 2
M SimpleDateFormat Problem Java Basics - Anfänger-Themen 3
Q SimpleDateFormat und Zeitzone Java Basics - Anfänger-Themen 5
R SimpleDateFormat Java Basics - Anfänger-Themen 5
Benji0815 SimpleDateFormat Java Basics - Anfänger-Themen 2
P SimpleDateFormat Java Basics - Anfänger-Themen 5
Pir0x Problem mit SimpleDateFormat Java Basics - Anfänger-Themen 6
A Frage bei der Formatierung von SimpleDateFormat Java Basics - Anfänger-Themen 7
G SimpleDateFormat geht eine Stunde nach Java Basics - Anfänger-Themen 4
D SimpleDateFormat in String umwandeln Java Basics - Anfänger-Themen 7
J SimpleDateFormat funktioniert nicht richtig? Java Basics - Anfänger-Themen 3
T SimpleDateFormat-Problem in Linux-Umgebung Java Basics - Anfänger-Themen 2
O SimpleDateFormat Probleme bei 12:00 Uhr und 12:30 Uhr Java Basics - Anfänger-Themen 2
G SimpleDateFormat Java Basics - Anfänger-Themen 9
A Wochentag über SimpleDateFormat bringt wirre Ergebnisse Java Basics - Anfänger-Themen 4
S SimpleDateFormat --> eclipse meldet Date ist mehrdeutig ? Java Basics - Anfänger-Themen 3
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I Prüfen, ob Anzahl an Monate ein Jahr ergeben Java Basics - Anfänger-Themen 4
T Jahre, Monate, Tage, Stunden, Minuten Java Basics - Anfänger-Themen 1
M Monat der letzen 12 Monate ermitteln Java Basics - Anfänger-Themen 8
D 3 Monate addieren Java Basics - Anfänger-Themen 10
T tage in monate und jahre Java Basics - Anfänger-Themen 9
N Tage in Jahre, Monate umrechnen Java Basics - Anfänger-Themen 1
B Errechnen(Jahre Monate Tage)von einem Datum zu einem anderen Java Basics - Anfänger-Themen 3
DStrohma Millisekunden umwandeln in Jahre, Monate, Tage, Stunden Java Basics - Anfänger-Themen 5
Z Double in komma und Punkt akzeptieren -> Robusteeingabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben