Einzelnen Beitrag anzeigen

Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?

  Alt 13. Apr 2005, 12:19
Was haltet hier von folgenden von mir geschriebenen Code:

Delphi-Quellcode:
function GetDateTimeForBiasSystemTime(GivenDateTime : TSystemTime; GivenYear : integer) : TDateTime;
var Year, Month, Day : word;
    Hour, Minute, Second, MilliSecond : word;
begin
  GivenDateTime.wYear := GivenYear;
  while not TryEncodeDayOfWeekInMonth(GivenDateTime.wYear, GivenDateTime.wMonth, GivenDateTime.wDay, GivenDateTime.wDayOfWeek, Result) do
    Dec(GivenDateTime.wDay);

  DecodeDateTime(Result, Year, Month, Day, Hour, Minute, Second, MilliSecond);
  Result := EncodeDateTime(Year, Month, Day, GivenDateTime.wHour, GivenDateTime.wMinute, GivenDateTime.wSecond, GivenDateTime.wMilliseconds);
end;

function GetBiasForDate(GivenDateTime : TDateTime) : integer;
var tzi : TIME_ZONE_INFORMATION;
begin
  GetTimeZoneInformation(tzi);
  if (GivenDateTime < GetDateTimeForBiasSystemTime(tzi.StandardDate, YearOf(GivenDateTime))) and
     (GivenDateTime >= GetDateTimeForBiasSystemTime(tzi.DaylightDate, YearOf(GivenDateTime))) then
    Result := (tzi.Bias + tzi.DaylightBias) * -1
  else
    Result := (tzi.Bias + tzi.StandardBias) * -1;
end;

function UTCToLocalDateTime(aUTC : TDateTime) : TDateTime;
begin
  Result := IncMinute(aUTC, GetBiasForDate(aUTC));
end;

function LocalDateTimeToUTC(aLocal : TDateTime) : TDateTime;
begin
  Result := IncMinute(aUTC, GetBiasForDate(aUTC) * -1);
end;
DateUtils muss eingebunden werden!

Soweit ich es bis jetzt überblickt habe, wird für das entsprechende Datum der korrekte Unterschied in Minuten (Bias) zur UTC Zeit zurückgeliefert und das gegebene Datum entsprechend der verwendeten Funktion umgerechnet.
Diese Funktionen sollten auch unter Win9x nutzbar sein. Für XP System kann man auch die hier beschriebenen Funktionen nehmen.

Was kann man an den oben von mir geposteten Funktionen noch verbessern?

Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat