Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Referenz Zeitzone ohne Sommer/Winterzeit ? (https://www.delphipraxis.net/42772-referenz-zeitzone-ohne-sommer-winterzeit.html)

th_bone 23. Mär 2005 16:53


Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Hi,

mal eine Frage ist GMT Zeit eigentlich ohne Sommer-/Winterzeit ? oder gibt es eine Zeitzone die man als Referenz nehmen kann ?

Ich will daten mit einem eindeutigen Zeitstempel speichern, aber z.B. wird ja in den USA die Winter/Sommer-Zeit anderst umgestellt als bei uns ... gibts es für Zeit eine eindeutige bezugsgröße von der man einfach auf die zeit des jeweiligen landes umrechnen kann ?

Danke

Ralf

Sharky 23. Mär 2005 17:18

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Hai th_bone,

die UTC ist ohne "regionale" Zeitänderungen (Sommer-/Winterzeit).

Binärbaum 23. Mär 2005 17:21

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Die GMT ist IMHO schon ohne Wechsel von Sommer-/Winterzeit.

MfG
Binärbaum

th_bone 23. Mär 2005 17:25

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Danke für die schnelle Antwort

Ralf

shmia 23. Mär 2005 17:26

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Es gibt die lokale Zeit (z.B.: GMT+1) und die Systemzeit (Coordinated Universal Time=UTC).
Die Funktion Now sieht so aus:
Delphi-Quellcode:
function Now: TDateTime;
var
  SystemTime: TSystemTime;
begin
  GetLocalTime(SystemTime);  // <===
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay) +
      EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;
Würde man statt GetLocalTime die Funktion GetSystemTime aufrufen, würde man die Zeit in UTC
bekommen.
Delphi-Quellcode:
function NowUTC: TDateTime;
var
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);  // <===
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay) +
      EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
end;
2 Rechner (einer in Deutschland, einer in China) müssen das gleiche Ergebnis von NowUTC ekommen, wenn die Funktion gleichzeitig aufgerufen wird. (Uhrzeitfehler & Relativitättheorie mal unberücksichtigt)
Der Unterschied zwischen lokaler Zeit und UTC bekommt man mit: GetTimeZoneInformation

Sharky 24. Mär 2005 06:43

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Zitat:

Zitat von shmia
...Der Unterschied zwischen lokaler Zeit und UTC bekommt man mit: GetTimeZoneInformation

Das habe ich mal in eine Funktion gepackt:
Delphi-Quellcode:
function NowUTC: TDateTime;
var
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);
  Result := SystemTimeToDateTime (SystemTime);
end;

function UtcTOLocalDateTime (aUTC : TDateTime) : TDateTime;
var
  tzi : TIME_ZONE_INFORMATION;
  utc : TSystemTime;
  localtime : TSystemTime;
begin
  DateTimeToSystemTime(aUTC,utc);
  GetTimeZoneInformation(tzi);
  SystemTimeToTzSpecificLocalTime(@tzi,utc,localtime);
  Result := SystemTimeToDateTime(localtime);
end;

hitzi 1. Apr 2005 13:07

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Und im umgedrehten Fall so:

Delphi-Quellcode:
[...]
interface

function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation;
  var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
{$EXTERNALSYM TzSpecificLocalTimeToSystemTime}

function LocalDateTimeToUTC(aLocal : TDateTime) : TDateTime;

[...]

implementation

function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime';

function LocalDateTimeToUTC(aLocal : TDateTime) : TDateTime;
var
  tzi : TIME_ZONE_INFORMATION;
  utc : TSystemTime;
  localtime : TSystemTime;
begin
  DateTimeToSystemTime(aLocal, localtime);
  GetTimeZoneInformation(tzi);
  TzSpecificLocalTimeToSystemTime(@tzi, localtime, utc);
  Result := SystemTimeToDateTime(utc);
end;

[...]

hitzi 3. Apr 2005 12:11

Re: Referenz Zeitzone ohne Sommer/Winterzeit ?
 
Für TzSpecificLocalTimeToSystemTime und SystemTimeToTzSpecificLocalTime wird laut MSDN WinXP benötigt. Gibt es entsprechende Funktionen auch für Win9x, NT und 2000?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 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