Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: 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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: 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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 23.04.09 15:30 
user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:

Strtoint meinte ich nicht.

Hab ich auch nicht vorgeschlagen, lies nochmal.

user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:
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..

user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Do 23.04.09 21:25 
user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 24.04.09 10:03 
user profile iconoldmax hat folgendes geschrieben Zum zitierten Posting springen:

Da hilft
ausblenden 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.

Wenn man sowas möchte, kann man gleich DecodeDate verwenden, um die Zahlen zu bekommen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 24.04.09 11:17 
user profile icondummzeuch hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 24.04.09 13:22 
Hallo,

user profile iconoldmax hat folgendes geschrieben Zum zitierten Posting springen:
Hi
Sorry, aber DecodeDate - Function ist in meiner Version nicht verfügbar....
Gruß oldmax

:gruebel: ist doch schon seit D1 enthalten -> SysUtils.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: 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?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var  Y, M, D: Word;

// Richtige Werte in Word
DecodeDate(MonthCalendar1.date, Y, M, D);

// speichern
ini.writeinteger('Datum','Y', StrToInt(Y));
ini.writeinteger('Datum','M', StrToInt(M));
ini.writeinteger('Datum','D', StrToInt(D));

// zurück lesen
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?