AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?
Thema durchsuchen
Ansicht
Themen-Optionen

TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?

Ein Thema von hitzi · begonnen am 12. Apr 2005 · letzter Beitrag vom 14. Mai 2007
Antwort Antwort
Benutzerbild von hitzi
hitzi

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

TzSpecificLocalTimeToSystemTime für Win9x, NT, 2000?

  Alt 12. Apr 2005, 17:25
Hallo,

für TzSpecificLocalTimeToSystemTime und SystemTimeToTzSpecificLocalTime wird laut MSDN WinXP benötigt. Gibt es entsprechende Funktionen auch für Win9x, NT und 2000?

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

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 12. Apr 2005, 18:04
MS sagt an anderer Stelle auch noch:
Zitat:
The SystemTimeToTzSpecificLocalTime function works in Windows NT. If called in Windows 95, the function fails, and returns FALSE.
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

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

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

  Alt 12. Apr 2005, 19:14
Dann muss ich eben die Funktionen selber erstellen. Über TIME_ZONE_INFORMATION und GetTimeZoneInformation bekommt ja alles Nötige.

Trotzdem danke
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
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
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

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

  Alt 13. Apr 2005, 12:23
Zitat:
Result := (tzi.Bias + tzi.StandardBias) * -1;
das geht?
* -1???
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

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

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

  Alt 13. Apr 2005, 12:30
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 - Bias := Bias * -1 Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

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

  Alt 13. Apr 2005, 12:33
kp, aber ich dacht immer man müsste * (-1) schreiben...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Rio1

Registriert seit: 11. Jun 2004
1 Beiträge
 
#8

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

  Alt 14. Mai 2007, 13:39
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;
  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 23:33 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