| Autor |
Beitrag |
Biarchiv
      
Beiträge: 688
|
Verfasst: Do 23.04.09 14:41
Hallo,
ich habe in den Dateutils nichts gefunden. Ich würde gerne ein Datum in ein Zahlenformat convertieren und auch wieder retour convertieren. Dieses sollte auf jedem Rechner egal welches Datumsformat funktionieren.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 23.04.09 15:19
Hat das einen Sinn, dass du selbstständig Zeilenumbrüche einfügst?? Find ich irgendwie schwerer zu lesen. Nur weil da bei dir das Eingabefenster zu Ende ist, heißt das nicht, dass das bei allen so ist..
Wie wäre es mit StrToDate und sowas? Oder was ist für dich ein "Zahlenformat"?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Do 23.04.09 15:25
Hallo,
danke für die Antwort.
Strtoint meinte ich nicht. Es geht mir darum, das man ein Datum als rein nummerischen Wert umgerechner/convertiert wird. Der Sinn liegt darin das jemand eine Zahl in einem Editfeld eingeben muss und daraus wird ein Datum. Nur sollte beachtet werden das es verschiedene Datumsformate gibt.
zB:
31.12.98 > 12345678
1998-12-31 > 12345678
12/31/98 > 12345678
12345678 > hier sollte man den Tag/Monat und Jahr einzeln rausbekommen um diesen dann im richtigen Datumsformat zu haben.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 23.04.09 15:30
Biarchiv hat folgendes geschrieben : |
Strtoint meinte ich nicht. |
Hab ich auch nicht vorgeschlagen, lies nochmal.
Biarchiv hat folgendes geschrieben : | Es geht mir darum, das man ein Datum als rein nummerischen Wert umgerechner/convertiert
wird. Der Sinn liegt darin das jemand eine Zahl in einem Editfeld eingeben muss und daraus wird
ein Datum. Nur sollte beachtet werden das es verschiedene Datumsformate gibt. |
Du tust es schon wieder..
Biarchiv hat folgendes geschrieben : | zB:
31.12.98 > 12345678
1998-12-31 > 12345678
12/31/98 > 12345678
12345678 > hier sollte man den Tag/Monat und Jahr einzeln rausbekommen um diesen
dann im richtigen Datumsformat zu haben. |
Macht StrToDate doch?
Intern wird das Datum als double behandelt, und wie das Ein- / Ausgabeformat aussieht, hängt von den Systemeinstellungen ab.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
dummzeuch
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Do 23.04.09 21:25
Biarchiv hat folgendes geschrieben : |
Nur sollte beachtet werden das es verschiedene Datumsformate gibt.
zB:
31.12.98 > 12345678
1998-12-31 > 12345678
12/31/98 > 12345678
12345678 > hier sollte man den Tag/Monat und Jahr einzeln rausbekommen um diesen dann im richtigen Datumsformat zu haben.
|
Vergiss es. Es gibt so viele verschiedene Datumsformate, dass das unmoeglich ist. Beispiel: Welches Datum ist das:
10/09/98
der 10.09.1998 oder der 09.10.1998?
In Grossbritannien das erste, in Amerika das zweite. Was richtig ist, laesst sich nur aus dem Kontext ermitteln. Oder wenn eine genuegend grosse Menge and Datumsstrings hast, bei denen sicher ist dass sie alle das gleiche Format haben, kannst Du beide Formate pruefen und findest mit etwas Glueck, dass nur eines gueltige Daten ergibt:
30/10/98 ist eindeutig, genauso wie 10/30/98.
Aber dann gibt es noch sowas wie 08/10/30, das koennte dann auch noch der 30.10.2008 oder der 30.10.1908 sein und so weiter.
Kurz: Es gibt keine allgemeingueltige Loesung.
twm
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Fr 24.04.09 05:50
Hi
Vielleicht hilft aber die Formatierung. Wenn ich es richtig verstanden habe, möchtest du das Datum zerlegen in Tag - Monat - Jahr.
Da hilft
Delphi-Quelltext 1:
| FormatDateTime('dd.mm.yyyy',Date) |
Den zurückgelieferten String kannst du nun in seine Bestandteile zerlegen und wenn nötig in Zahlen wandeln. Date ist wie bereits gesagt ein Double-Typ.
Möchtest du das Datumsformat anders, bitteschön, schreib eine Function und wandle entsprechend das Ergebnis aus FormatDateTime.
edit:
Habs grad ausprobiert:
FormatDateTime('mm/dd/yyyy',Date) liefert auch mm.dd.yyyy
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 24.04.09 10:03
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Fr 24.04.09 10:51
Hi
Sorry, aber DecodeDate - Function ist in meiner Version nicht verfügbar....
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 24.04.09 11:17
dummzeuch hat folgendes geschrieben : | 30/10/98 ist eindeutig, genauso wie 10/30/98.
Aber dann gibt es noch sowas wie 08/10/30, das koennte dann auch noch der 30.10.2008 oder der 30.10.1908 sein und so weiter.
Kurz: Es gibt keine allgemeingueltige Loesung. |
Kann auch der 10. August 2030 oder der 8. Oktober 1930 sein
Genau deshalb arbeitet man mit Datumswerten intern als Timestamp und gibt sie nur zur Ausgabe als Strungs raus. Ansonsten nimmt man für die Eingabe entsprechende Komponenten, die sich um den Format-Kontext kümmern, anstatt hier unnötig selber rumhacken zu müssen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 24.04.09 13:22
Hallo,
oldmax hat folgendes geschrieben : | Hi
Sorry, aber DecodeDate - Function ist in meiner Version nicht verfügbar....
Gruß oldmax |
 ist doch schon seit D1 enthalten -> SysUtils.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Biarchiv 
      
Beiträge: 688
|
Verfasst: Fr 24.04.09 14:58
Hey,
ja das mit dem Datum ist so ein Problem, wenn es überall laufen sollte.
Was noch wichtig ist. Ist bei Y immer 4 und M, D immer 2 Stellen? Egal bei welchen Datumsformat?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var Y, M, D: Word;
DecodeDate(MonthCalendar1.date, Y, M, D);
ini.writeinteger('Datum','Y', StrToInt(Y)); ini.writeinteger('Datum','M', StrToInt(M)); ini.writeinteger('Datum','D', StrToInt(D));
Y := IntToStr(ini.Readinteger('Datum','Y', Y)); M := IntToStr(ini.Readinteger('Datum','M', M)); D := IntToStr(ini.Readinteger('Datum','D', D));
MonthCalendar1.date := DecodeDate(Y, M, D); |
Müsste doch so laufen?
|
|
|