AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TFormatSettings Unterschied ShortDateFormat und LongDateFormat

TFormatSettings Unterschied ShortDateFormat und LongDateFormat

Ein Thema von Codehunter · begonnen am 6. Jul 2021 · letzter Beitrag vom 6. Jul 2021
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.668 Beiträge
 
Delphi 12 Athens
 
#1

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 14:37
Es ist ja auch etwas verwirrend wenn DateTimeToStr für das Datum das ShortDateFormat aber für die Zeit das LongTimeFormat nimmt.

Delphi-Quellcode:
var
  FS: TFormatSettings;
  S: string;
begin
  FS.ShortDateFormat := 'mm/dd/yyyy';
  FS.LongDateFormat := FS.ShortDateFormat;
  FS.ShortTimeFormat := 'hh:nn:ss';
  FS.LongTimeFormat := FS.ShortTimeFormat;
  FS.DateSeparator := '-';
  FS.TimeSeparator := '-';
  S := DateTimeToStr(Now, FS).Replace(' ', '-');
end;
Im Ergebnis kommt dann so etwas heraus:
Code:
12-31-2021-12-34-56
Hast du mal probiert, ob das nicht auch so funktioniert?
Delphi-Quellcode:
var
  FS: TFormatSettings;
  S: string;
begin
  FS := TFormatSettings.Invariant;
  FS.DateSeparator := '-';
  FS.TimeSeparator := '-';
  S := DateTimeToStr(Now, FS);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#2

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 16:21
Es ist ja auch etwas verwirrend wenn DateTimeToStr für das Datum das ShortDateFormat aber für die Zeit das LongTimeFormat nimmt.
Ja und nicht nur das. Sondern auch die Ungewissheit, in wie fern da noch Regional- und Systemeinstellungen mit rein spielen. Das kann man ja auch nur begrenzt testen.

Hast du mal probiert, ob das nicht auch so funktioniert?
Delphi-Quellcode:
var
  FS: TFormatSettings;
  S: string;
begin
  FS := TFormatSettings.Invariant;
  FS.DateSeparator := '-';
  FS.TimeSeparator := '-';
  S := DateTimeToStr(Now, FS);
end;
Im vorgenannten Beispiel könnte das - mit Ausnahme des Bindestriches zwischen Datum und Uhrzeit - funktionieren. Aber ich habe zahlreiche ganz unterschiedliche Formatierungen, die nicht so eng an das englische Format angelehnt sind. Dann ginge das wieder nicht mehr.

Also wenn ich das so rekapituliere scheint es nicht völlig übertrieben zu sein, Shortxxx und Longxxx jeweils gleich zu belegen. Damit einher geht dann für mich die Frage, wie sinnhaltig die threadsichere zweite Implementierung von FormatDateTime ist, die dann ja mit fünf (!!!) evtl. unterschiedlichen Formatstrings hantiert.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.668 Beiträge
 
Delphi 12 Athens
 
#3

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 16:40
Die Threadsicherheit wird dadurch hergestellt, dass die FormatSettings entweder nur in einem Thread verwendet werden oder einmal eingestellt nicht mehr verändert werden. Ich frage mich aber, warum du überhaupt die vordefinierten FormatStrings nimmst, wenn du solche Spezialitäten brauchst. Dann kannst du den FormatString doch bei FormatDateTime direkt übergeben.
Delphi-Quellcode:

  S := FormatDateTime('mm-dd-yyyy hh-mm-ss', Now, TFormatSettings.Invariant);
Das TFormatSettings.Invariant ist nur zur Konsistenz da und hat eigentlich keinen Einfluss.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#4

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 16:49
  S := FormatDateTime('mm-dd-yyyy hh-mm-ss', Now, TFormatSettings.Invariant);
Stop stop stop! Das musst du mir jetzt mal erklären. Ich dachte immer, solche Formatstrings wären ungültig? Wegen der Date- bzw. Time-Separatoren, die dann entweder mit "/" (Date) oder ":" (Time) als Platzhalter angegeben werden müssen und dann erst vom Formatierer ersetzt werden? Deswegen mach ich ja den ganzen Aufriss mit den Formatsettings. Wie gesagt, immer im Hinterkopf, dass mir da u.U. das System und die Regionalsettings reinpfuschen könnten.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.668 Beiträge
 
Delphi 12 Athens
 
#5

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 17:14
Stop stop stop! Das musst du mir jetzt mal erklären. Ich dachte immer, solche Formatstrings wären ungültig? Wegen der Date- bzw. Time-Separatoren, die dann entweder mit "/" (Date) oder ":" (Time) als Platzhalter angegeben werden müssen und dann erst vom Formatierer ersetzt werden?
Wenn du "/" und ":" für Datums- bzw. Zeittrenner verwendest werden diese durch die in den FormatSettings eingestellten Werte ersetzt. Andere Zeichen werden als Literale behandelt und bleiben unverändert.

Solltest du als ein "/" für den Datumstrenner benötigen, muss der in den FormatSettings auch so gesetzt sein. Durch die Verwendung von Invariant liefert dann eine Angabe von "mm/dd/yyyy" auch ein "07/06/2021".

Yup, das wollte ich auch gerade schreiben, aber mit nn für Ninuten
Ist eigentlich auch korrekt, aber die Implementierung ist intelligent genug das "mm" im Zeitanteil als Minuten zu behandeln.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.177 Beiträge
 
Delphi 12 Athens
 
#6

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 17:23
Yup, das wollte ich auch gerade schreiben, aber mit nn für Ninuten
Ist eigentlich auch korrekt, aber die Implementierung ist intelligent genug das "mm" im Zeitanteil als Minuten zu behandeln.
Bist Du sicher dass es immer funktioniert, auch wenn man vom gewohnten yy.mm.dd hh:nn:ss Stil abweicht ?
Also schon dem 'mm-dd-yyyy hh-mm-ss' würde ich das richtige Erkennen nicht mehr zutrauen
Was ist mit 'mm;yy;dd;hh;mm;ss' oder noch verwurschtelter ?

Falls das doch erkannt wird, dann ist das ein erneuter Beweis für die Genialität von Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.668 Beiträge
 
Delphi 12 Athens
 
#7

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 17:36
Falls das doch erkannt wird, dann ist das ein erneuter Beweis für die Genialität von Delphi.
          if (Token = 'M') and (LastToken = 'H') then Token := 'N';
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.177 Beiträge
 
Delphi 12 Athens
 
#8

AW: TFormatSettings Unterschied ShortDateFormat und LongDateFormat

  Alt 6. Jul 2021, 17:07
Delphi-Quellcode:

  S := FormatDateTime('mm-dd-yyyy hh-mm-ss', Now, TFormatSettings.Invariant);
Yup, das wollte ich auch gerade schreiben, aber mit nn für Ninuten

Delphi-Quellcode:

  S := FormatDateTime('mm-dd-yyyy hh-nn-ss', Now, TFormatSettings.Invariant);
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz