TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Hallo,
für TzSpecificLocalTimeToSystemTime und SystemTimeToTzSpecificLocalTime wird laut MSDN WinXP benötigt. Gibt es entsprechende Funktionen auch für Win9x, NT und 2000? Gruss |
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
MS sagt an anderer Stelle auch noch:
Zitat:
|
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Dann muss ich eben die Funktionen selber erstellen. Über TIME_ZONE_INFORMATION und GetTimeZoneInformation bekommt ja alles Nötige.
Trotzdem danke |
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Was haltet hier von folgenden von mir geschriebenen Code:
Delphi-Quellcode:
DateUtils muss eingebunden werden!
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; 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 |
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Zitat:
* -1??? |
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Ja! Der Bias wird nach dem Schema berechnet bias = UTC - local time (MSDN) Deshalb kommt in unseren Fall eine negative Zahl heraus. Um nun die lokalen Zeit ausrechnen möchte muss man UTC + BIAS rechnen. Das funktioniert nur mit der Function IncMinute, wenn man vorher das Vorzeichen vom ermittelten Bias ändert -
Delphi-Quellcode:
Gruss
Bias := Bias * -1
|
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
kp, aber ich dacht immer man müsste * (-1) schreiben...
|
Re: TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Sommer und Winterzeit sollten ja hier auch automatisch berücksichtigt werden oder?
letzte funktion sollte wahrscheinlich so aussehen
Delphi-Quellcode:
function LocalDateTimeToUTC(aLocal : TDateTime) : TDateTime;
begin Result := IncMinute(aLocal, GetBiasForDate(aLocal) * -1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 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