Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   datumsformat (https://www.delphipraxis.net/185701-datumsformat.html)

khh 30. Jun 2015 13:25

datumsformat
 
hallo zusammen,
kann mir jemand sagen wie ich zu so einem Datumsformat komme ?

Delphi-Quellcode:

2015-02-01T00:00:00Z
ich danke euch

mkinzler 30. Jun 2015 13:45

AW: datumsformat
 
Das ist das ISO Datumsformat

p80286 30. Jun 2015 13:54

AW: datumsformat
 
Von wo aus?

Gruß
K-H

Phoenix 30. Jun 2015 14:00

AW: datumsformat
 
Du bist hier in "Programmieren allgemein". Um welche Programmiersprache dreht es sich denn erstmal?

Uwe Raabe 30. Jun 2015 14:24

AW: datumsformat
 
Wenn es um Delphi geht: System.DateUtils hat eine Funktion
Delphi-Quellcode:
DateToISO8601
.

Popov 30. Jun 2015 14:38

AW: datumsformat
 
Wenn es nur um die Formatierung geht:
Delphi-Quellcode:
  ShowMessage(FormatDateTime('yyyy-MM-dd"T"hh:nn:ss"Z"', Date));
Ansonsten siehe Tipps oben.

khh 30. Jun 2015 14:40

AW: datumsformat
 
sorry, geht bei mir wie immer um Lazarus.

DateToISO8601 gibts dort nicht :-(

mkinzler 30. Jun 2015 14:51

AW: datumsformat
 
http://wiert.me/2011/08/18/iso-8601-...ebugging-tool/

Phoenix 30. Jun 2015 14:59

AW: datumsformat
 
Dann bleibt Dir vermutlich kaum was anderes über, als die Darstellung in ISO8601 und das Parsen von dort selber zu übernehmen.

Aber aufpassen, wenn Du das Codesample von Popov übernehmen willst:

Das Z hinten gibt an, das die Zeit in UTC ist. Das heisst wenn Du eine lokale Zeit hast (z.B. bei uns Mitteleuropäische Sommerzeit), dann musst Du jetzt z.B. 2015-06-30T15:56+02:00 angeben oder aber vorher in UTC umrechnen: 2015-06-30T13:56Z.

Ich empfehle vor der Implementierung das hier zu lesen: https://de.wikipedia.org/wiki/ISO_8601
Bzw. wenn Du eine Bibliothek findest die das macht, die dagegen mal kurz abzuklopfen.

khh 30. Jun 2015 15:07

AW: datumsformat
 
alsoo ich hab jetzt das Beispiel von Popov ausprobiert.
Das funktioniert bis zum 9. des Monats:

Delphi-Quellcode:
2015-06-09T00:00:00Z
am 10. des Monats bekomme ich als Ergebnis :

Delphi-Quellcode:
2015-06-01T00:00:00Z0
am 11ten

Delphi-Quellcode:
2015-06-01T00:00:00Z1
was läuft da falsch??

khh 30. Jun 2015 15:18

AW: datumsformat
 
@Markus, ich danke dir, aber

XSBuiltIns hab ich bei Lazarus leider auch nicht :-(

BadenPower 30. Jun 2015 15:34

AW: datumsformat
 
Zitat:

Zitat von khh (Beitrag 1307216)
alsoo ich hab jetzt das Beispiel von Popov ausprobiert.
Das funktioniert bis zum 9. des Monats:

Das Beispiel von Popov funktioniert einwandfrei.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lDateTime: TDateTime;
begin
  lDateTime := StrToDate('10.06.2015','.');
  ShowMessage(FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"Z"', lDateTime));
end;

Ausgabe: 2015-06-10T00:00:00Z

Zitat:

Zitat von khh (Beitrag 1307216)
was läuft da falsch??

Irgendetwas mit Deinen TDateTime-Werten, welche Du übergibst stimmt nicht.

Wo kommen die denn hier bzw. wie und wo werden diese erzeugt?

khh 30. Jun 2015 16:12

AW: datumsformat
 
mit

Delphi-Quellcode:
  myDate := StrToDate('01/06/15'); // Startdatum
setze ich das Startdatum

in einer Schleife zähle ich die Daten hoch
tag: string;
Delphi-Quellcode:
  for i:= 1 to 30 do
    begin
       Tag:= FormatDateTime('yyyy-MM-dd"T"hh:nn:ss"Z"', myDate);    
       myDate := incDay(mydate) ;
    end;
EDIT: muss woanders liegen :-(

BadenPower 30. Jun 2015 16:38

AW: datumsformat
 
Zitat:

Zitat von khh (Beitrag 1307221)
mit

Delphi-Quellcode:
  myDate := StrToDate('01/06/15'); // Startdatum
setze ich das Startdatum

in einer Schleife zähle ich die Daten hoch
tag: string;
Delphi-Quellcode:
  for i:= 1 to 30 do
    begin
       Tag:= FormatDateTime('yyyy-MM-dd"T"hh:nn:ss"Z"', myDate);    
       myDate := incDay(mydate) ;
    end;
EDIT: muss woanders liegen :-(

Dann zeige uns mal die Funktion incDay().

khh 30. Jun 2015 16:39

AW: datumsformat
 
habs gefunden

der Übeltäter ist
Delphi-Quellcode:
   FileReplaceString(ziel,#tag1,Tag);
die Platzhalter #tag1 usw. gehen bis #tag31
damit werden bereits bei #tag10 der string #tag1 von #tag10 ersetzt, was bleibt ist die 0 hinter dem Z :-(

wie krieg ich das den anders hin?

mkinzler 30. Jun 2015 16:44

AW: datumsformat
 
Wie sieht FileReplaceString aus?

khh 30. Jun 2015 16:44

AW: datumsformat
 
ach ja die procedure ;-)

Delphi-Quellcode:
procedure FileReplaceString(const FileName, searchstring, replacestring: string);
var
  fs: TFileStream;
  S: string;
begin
  fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone);
  try
    SetLength(S, fs.Size);
    fs.ReadBuffer(S[1], fs.Size);
  finally
    fs.Free;
  end;
  S := StringReplace(S, SearchString, replaceString, [rfReplaceAll, rfIgnoreCase]);
  fs := TFileStream.Create(FileName, fmCreate);
  try
    fs.WriteBuffer(S[1], Length(S));
  finally
    fs.Free;
  end;
end;
edit: ich könnte die Ziffern der Platzhalter vor den String schreiben :-(
der Lesbarkeit halber wärs mir aber lieber die Platzhalter könnten so bleiben ;-)

Popov 30. Jun 2015 16:50

AW: datumsformat
 
FileReplaceString macht seinen Job richtig, das Problem ist der Platzhalter. Woher soll FileReplaceString nun wissen, dass #tag1 mal für den Tag 1 steht und mal ein Teil von Tag 10 ist.

Hier muss entweder der Platzhalter verändert werden oder der String muss geparst werden.

Uwe Raabe 30. Jun 2015 16:51

AW: datumsformat
 
Wie rufst du FileReplaceString auf? In einer Schleife von 1 bis 31? Dann vielleicht besser rückwärts.

p80286 30. Jun 2015 17:11

AW: datumsformat
 
Zitat:

Zitat von khh (Beitrag 1307226)
edit: ich könnte die Ziffern der Platzhalter vor den String schreiben :-(
der Lesbarkeit halber wärs mir aber lieber die Platzhalter könnten so bleiben ;-)

Wie wäre es denn mit 01,02..09,10,11..99 ?

(Da sich die übliche Leseweise an der ersten Ziffer von rechts orientiert muß man halt bei der Leserichtung von links nach rechts ein eintsprechendes Füllzeichen dazu packen)

Gruß
K-H

Popov 30. Jun 2015 17:33

AW: datumsformat
 
Der Vorschlag von Uwe sollte aber auch klappen.

Dejan Vu 1. Jul 2015 06:59

AW: datumsformat
 
Kannst Du die Tags nicht ändern, also z.B. '#tag1#'? Dann ist das eindeutig,

Die Lösung von Uwe hat nämlich den Nachteil, das sie die konzeptionelle Schwäche der Tag-Namen kaschiert, anstatt das Problem von Grund auf zu lösen.

In 3 Jahren hast Du vergessen, wieso die Schleife rückwärts läuft und denkst Dir vielleicht; "Blödsinn, ich lasse sie vorwärts laufen, sieht besser aus". => Peng.

khh 1. Jul 2015 07:51

AW: datumsformat
 
>> Wie wäre es denn mit 01,02..09,10,11..99 ?

das ists, so einfach, oder?
Warum bin ich da nicht selbst drauf gekommen ;-)


ich danke euch

Dejan Vu 1. Jul 2015 08:35

AW: datumsformat
 
Bis man mehr als 99 braucht

Popov 1. Jul 2015 10:45

AW: datumsformat
 
Laut gut informierter Quelle hat man in den nächsten Dekaden nicht vor mehr als 31 Tage einzuführen. Auch nicht mehr als 12 Monate. Womit die Sorge zum Teil unbegründet ist. Und sollte das Programm von khh über das Jahr (20)99 hinweg genutzt werden, dann werde ich kräftig beeindruckt sein.

p80286 1. Jul 2015 11:06

AW: datumsformat
 
Zitat:

Zitat von Popov (Beitrag 1307317)
Laut gut informierter Quelle hat man in den nächsten Dekaden nicht vor mehr als 31 Tage einzuführen. Auch nicht mehr als 12 Monate. Womit die Sorge zum Teil unbegründet ist. Und sollte das Programm von khh über das Jahr (20)99 hinweg genutzt werden, dann werde ich kräftig beeindruckt sein.

Da aber u.U. auch Datumswerte des letzten Jahrhunderts bearbeitet werden müssen ist das nicht so leicht zu ignorieren. Aber mit 4 Stellen sollte man für einen überschaubaren Zeitraum gerüstet sein, es sei denn Datumswerte von vor Christie Geburt sind gefragt.:stupid:

Gruß
K-H

khh 1. Jul 2015 12:32

AW: datumsformat
 
falls das Programm im Jahr 2100 noch läuft ist es längst in mein Vermächtnis übergegangen.

Und im aktuellen Fall geht das Datum auch nicht in die Vergangenheit.
Also alles gut ;-)


ich danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz