Announcement

Collapse
No announcement yet.

GMT - Greenwitch Mean Time

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GMT - Greenwitch Mean Time

    Grüße - ich hab ein kleines Problem ...

    Ich will in meinen Datenfiles Datum/Zeit prinzipiell als GMT speichern.
    Grund: Wenn jemand in den USA z.B. die Zeit ausliest soll diese ebenfalls stimmen.

    Prinzipell verwende ich in meinen Programmen TDateTime - nur habe ich keine Ahnung, wie die intern gespeichert wird (meiner Meinung immer local ).

    Ich suche daher zwei Funktionen:

    Erste soll die TDateTime in ein TDateTime mit GMT wandeln.
    Zweite eben umgekehrt - also nach dem Motto:

    function DateTimeToGmt(AValue: TDateTime): TDateTime;
    function GmtToDateTime(AValue: TDateTime): TDateTime;

    Trotz Suche in der Hilfe und diverser Bücher hab ich nix gefunden, was Cross-Platform-tauglich ist (nur Aufrufe der WinAPI - aber das nützt mir nicht viel unter Linux).

    Gibts da schon was, besonders Funktionen, die auch den Datumssprung berücksichtigen ?

  • #2
    Hallo,

    >..was Cross-Platform-tauglich ist

    so etwas kann es auch nicht geben, denn für die Umrechnung der Zeit werden mindestens zwei "externe" Parameter benötigt: <br>
    1. Die aktuelle Zeitzone des Rechners (d.h. die im Betriebssystem zugewiesene Zeitzone) <br>
    2. Ein Kennzeichner, ob Sommer- oder Winterzeit vorliegt.<br>
    Man muss daher in jedem Fall auf das jeweilige Betriebssystem-API zugreifen, um diese Basis-Parameter auszulesen

    Comment


    • #3
      Hallo,

      TDatetime ist ein Double-Wert. Der aufbau ist in der Delphihilfe aufgeführt.

      Über die API-Funktion GetTimezoneinformation bekommst du den Versatz von
      lokaler Zeit zur GMT (siehe auch API-Hilfe von Delphi). Damit sollte es einfach sein die Umwandlungsfunktionen zu schreiben.

      Da eine Windows-API-Funktion verwendet wird ist das allerdings nicht
      Cross-Platform-tauglich. Wie Herr Kosch bereits schrieb wird das so auch nicht möglich sein.

      Gruß Uw

      Comment


      • #4
        Hmm ...

        Okay - das mit dem double war mir schon klar.

        Hat vielleicht irgendjemand Infos parat, wie ich unter Linux die lokalen Infos rausquetsche

        Comment


        • #5
          Da das heisst das du offensichtlich mindestens Delphi 6 hast, solltest du vielleicht mal die Delphi-Hilfe bemuehen. Gerade bei den Zeitwandlungsroutinen sind etliche Funktionen dazugekommen. Die Namensbestandteile sind "SystemTime", "FileTime", "LocalTime" usw

          Comment


          • #6
            <B>
            uses<BR>
            XSBuiltIns; // Für TXsCustomDateTime ;-)<BR>
            </B><BR>
            Yo - stimmt - diese Klasse ist laut Hilfe cross-tauglich !<BR>
            <BR>
            Das ist die kleine Funktion um die lokale Zeit (Zulu) in GMT zu wandeln :<BR>
            <B><BR>
            function DateTimeLocalToGMT(aValue: TDateTime): TDateTime;<BR>
            var<BR>
            lDateConverter: TXsCustomDateTime;<BR>
            begin<BR>
            <BR>
            lDateConverter:=TXsCustomDateTime.Create;<BR>
            lDateConverter.AsDateTime:=aValue;<BR>
            Result:=lDateConverter.AsUTCDateTime;<BR>
            lDateConverter.Free;<BR>
            <BR>
            end;<BR>
            </B><BR>
            <BR>
            Das ist die kleine Funktion um die GMT Zeit in lokale (Zulu) zu wandeln :<BR>
            <B><BR>
            function DateTimeLocalToGMT(aValue: TDateTime): TDateTime;<BR>
            var<BR>
            lDateConverter: TXsCustomDateTime;<BR>
            begin<BR>
            <BR>
            lDateConverter:=TXsCustomDateTime.Create;<BR>
            lDateConverter.AsUTCDateTime:=aValue;<BR>
            Result:=lDateConverter.AsDateTime;<BR>
            lDateConverter.Free;<BR>
            <BR>
            end;<BR>
            </B><BR>
            <BR>
            Wie man schön sehen kann, geht man auf dieser weise alle Probleme mit systemabhängigen Abfragen der Zeitzonen aus dem Weg - tjo, klar, die schnellste Methode ists sicher nicht; aber naja - wenn man intern nur mit UTC arbeitet und die lokale Zeit nur für die Anzeige verwendet, ists Wurscht. *lol

            Comment

            Working...
            X