AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???
Thema durchsuchen
Ansicht
Themen-Optionen

Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

Ein Thema von romber · begonnen am 1. Feb 2011 · letzter Beitrag vom 2. Feb 2011
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 20:22
Delphi-Version: 5
Hallo!

Server sendet dem Client XML-Daten mit mehreren Datum-Zeit-Feldern (z.B. 01.02.2011 18:20:51) drin, die dann auf der Client-Seite mittels StrToDateTime() den TDateTime-Eigenschaften eines Objekts zugewiesen werden. Wenn in den Windows-Einstellungen für Region und Sprache eine andere Sprache eingestellt ist (z.B. Englisch oder Arabisch) schlägt die Umwandlung mit StrToDateTime() fehl, weil die Datum- und Zeitformat anders sind. Das Problem lässt sich natürlich ganz einfach lösen, indem man beim Start des Programms die SysUtils-Variablen DateSeparator, ShortDateFormat und LongTimeFormat vorsorglich mit deutschen Werten überschreibt. Das Problem ist, dass wenn ich dann die Datum und Zeit aus der Eigenschaft in der aktuell eingestellten Sprache visualisieren möchte, muss ich die o.g. Variablen wieder in den ursprünglichen Zustand zurücksetzen.

Wie mache ich das?

Gibt es in meinem Fall eine Möglichkeit, die im deutschen Format übertragene Datum und Zeit einer TDateTime-Variable zuzuweisen, ohne die o.g. SysUtils-Variablen zu überscheiben?

Danke!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 20:26
Verwende die überladene Funktion mit den Formateinstellungen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 20:35
Er meint das Delphi-Referenz durchsuchenTFormatSettings (z.B. siehe hier Delphi-Referenz durchsuchenFormatDateTime)

Dafür initialisierst du dir in deiner Anwendung eine globale Version davon, welche beim Programmstart mit den gewünschten Werten belegt und dann überall mit angegeben wird.
Oder du kapselst dir alles in einer Funktion, welche dir einen "Serverzeitstring" zurückliefert.


[edit]
aber mir fällt grad ein (falls die Delphiangabe im Thread absicht ist und nicht einfach nur vergessen wurde und da nichts im Profil steht)...
Gab es diese Parameter in Delphi 5 schon?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 21:16
Hallo

Vorschlag:

Delphi-Quellcode:
// Beispiel:
// s3 := '2008-09-23T14:15:22.984';
// dt6 := fctString2DateTime('YYYY MM DD HH NN SS ZZZ',s3);

function fctString2DateTime(const sFormat,sDateTimeString:String):TDateTime;
var
  i0 : integer;
  w1Year,w2Month,w3Day,w4Hour,w5Min,w6Sec,w7MSec:Word;
  i8 : Integer;
begin
  // local init
  Result := 0.0;
  i0 := 0;
  w1Year := 0;
  w2Month:= 0;
  w3Day := 0;
  w4Hour := 0;
  w5Min := 0;
  w6Sec := 0;
  w7MSec := 0;
  i8 := 0;
  // local main
  try
    if (Length(sFormat)=Length(sDateTimeString)) then
      begin
        for i8 := 1 to Length(sFormat) do
          begin
            i0 := Ord(sDateTimeString[i8])-48;
            if (i0>=0) and (i0<=9) then
              begin
                case sFormat[i8] of
                  'Y','y':w1Year := w1Year * 10 + i0;
                  'M','m':w2Month := w2Month * 10 + i0;
                  'D','d':w3Day := w3Day * 10 + i0;
                  'H','h':w4Hour := w4Hour * 10 + i0;
                  'N','n':w5Min := w5Min * 10 + i0;
                  'S','s':w6Sec := w6Sec * 10 + i0;
                  'Z','z':w7MSec := w7MSec * 10 + i0;
                end;
              end;
          end;
      end;
    Result := EncodeDateTime(w1Year,w2Month,w3Day,w4Hour,w5Min,w6Sec,w7MSec);
  except
    Result := 0.0;
  end;
end;
Peter Schaible
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 21:58
Vielen Dank für die schnelle Reaktionen!

Dafür initialisierst du dir in deiner Anwendung eine globale Version davon, welche beim Programmstart mit den gewünschten Werten belegt und dann überall mit angegeben wird.
Das klappt sehr gut. Danke! Ich rufe GetLocaleFormatSettings und fülle die meine FormatSettings mit aktuellen Werten.
Aber um empfangene Datum und Zeit in TDateTime umzuwandelt, muss ich die DateSeparator, ShortDateFormat und LongTimeFormat vor der Umwandlung trotzdem überschreiben, oder gibt es dafür auch eine Funktion?

@peschai

Vielen Dank! Ich schaue mir die Funktion jetzt an.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 1. Feb 2011, 22:02
Standardmässig sollten die Systemeinstellungen automaticsh verwendet werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 2. Feb 2011, 12:49
Vergiss die Zeitzonen Informationen nicht, wenn sich Client und Server in unterschiedlichen Zeitzonen aufhalten gibts sonst verfälschte Daten.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Formatierung der Datum und Zeit je nach Windows-Spracheinstellungen???

  Alt 2. Feb 2011, 13:02
Hallo,

schreib dir doch eine eigene StrToDateTime2,
in der du die Originalvariablen (DateSeparator, ShortDateFormat und LongTimeFormat) rettest,
deine eigenen Werte setzt und im finally die geretteten Daten wieder zurückschreibst.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:24 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