Avatar billede morten_s Nybegynder
24. februar 2003 - 12:41 Der er 16 kommentarer og
1 løsning

Vintertid - Sommertid

Er det mulgit via Delphi og læse ud af windows om det er sommer/vintertid
Avatar billede borrisholt Novice
24. februar 2003 - 12:44 #1
var
  tz : TTimeZoneInformation;
begin
  GetTimeZoneInformation(Tz);

end;
Avatar billede morten_s Nybegynder
24. februar 2003 - 12:48 #2
Hej Jens, det er vist et windowskald...... har du ikke lidt på
formatet af tz, jeg kan ikke finde den i delphi help
Avatar billede borrisholt Novice
24. februar 2003 - 12:52 #3
TIME_ZONE_INFORMATION akn du slå op i hjælpen.

Jens b
Avatar billede morten_s Nybegynder
24. februar 2003 - 12:59 #4
Synes nu ikke lige at man kan se om man er i sommer eller vintertid der....
Avatar billede nop Nybegynder
24. februar 2003 - 13:10 #5
typedef struct _TIME_ZONE_INFORMATION { // tzi 
    LONG      Bias;
    WCHAR      StandardName[ 32 ];
    SYSTEMTIME StandardDate;
    LONG      StandardBias;
    WCHAR      DaylightName[ 32 ];
    SYSTEMTIME DaylightDate;
    LONG      DaylightBias;
} TIME_ZONE_INFORMATION;

daylight=sommertid/vintertid (daylight saving)
bias="justering"
Avatar billede morten_s Nybegynder
24. februar 2003 - 13:27 #6
ja ok....man får dato for sommer/normaltid, har egentlig bare bryg for et flag der siger om sommertid er sat.....men det må jeg jo så bikse sammen
Avatar billede nop Nybegynder
24. februar 2003 - 13:50 #7
Ja, om navnet er tomt eller om daylightDate=0 eller daylightBias=0 eller samme som bias/standard bias. Men du kan jo prøve på din egen maskine og slå den fra/til og printe værdierne ud i en dlg-box.
Avatar billede borrisholt Novice
24. februar 2003 - 14:05 #8
1)
  Sæt en TMemo på en form.
2)
  Lav et OnCreate Event
3)
  Prøv det her :

function Date2Month(const DT: TDateTime): Word;
var
  D, Y: Word;
begin
  DecodeDate(DT, Y, Result, D);
end;

function Date2Year(const DT: TDateTime): Word;
var
  D, M: Word;
begin
  DecodeDate(DT, Result, M, D);
end;

function ThisYear: Word;
begin
  Result := Date2Year(Date);
end;

function DateIsLeapYear(const DT: TDateTime): Boolean;
begin
  Result := IsLeapYear(Date2Year(DT));
end;

function DaysInMonth(const DT: TDateTime): Byte;
begin
  case Date2Month(DT) of
    2: if DateIsLeapYear(DT) then
        Result := 29
      else
        Result := 28;
    4, 6, 9, 11: Result := 30;
  else
    Result := 31;
  end;
end;

function DayOfMonth2Date(year, month, weekInMonth, dayInWeek: word): TDateTime;
var
  days: integer;
  day: integer;
begin
  if (weekInMonth >= 1) and (weekInMonth <= 4) then
  begin
    day := DayOfWeek(EncodeDate(year, month, 1)); // get first day in month
    day := 1 + dayInWeek - day; // get first dayInWeek in month
    if day <= 0 then
      Inc(day, 7);
    day := day + 7 * (weekInMonth - 1); // get weekInMonth-th dayInWeek in month
    Result := EncodeDate(year, month, day);
  end
  else if weekInMonth = 5 then
  begin // last week, calculate from end of month
    days := DaysInMonth(EncodeDate(year, month, 1));
    day := DayOfWeek(EncodeDate(year, month, days)); // get last day in month
    day := days + (dayInWeek - day);
    if day > days then
      Dec(day, 7); // get last dayInWeek in month
    Result := EncodeDate(year, month, day);
  end
  else
    Result := 0;
end; { DayOfMonth2Date }

function DSTDate2Date(dstDate: TSystemTime; year: word): TDateTime;
begin
  if dstDate.wMonth = 0 then
    Result := 0 // invalid month => no DST info
  else if dstDate.wYear = 0 then
  begin // day-of-month notation
    Result :=
      DayOfMonth2Date(year, dstDate.wMonth, dstDate.wDay, dstDate.wDayOfWeek + 1 {convert to Delphi Style}) +
      EncodeTime(dstDate.wHour, dstDate.wMinute, dstDate.wSecond, dstDate.wMilliseconds);
  end
  else if dstDate.wYear = year then // absolute format - valid only for specified year
    Result := SystemTimeToDateTime(dstDate)
  else
    Result := 0;
end;

function GetTZDaylightSavingInfoForYear(
  TZ: TTimeZoneInformation; year: word;
  var DaylightDate, StandardDate: TDateTime;
  var DaylightBias, StandardBias: longint): boolean;
begin
  Result := false;
  if (TZ.DaylightDate.wMonth <> 0) and (TZ.StandardDate.wMonth <> 0) then
  begin
    DaylightDate := DSTDate2Date(TZ.DaylightDate, year);
    StandardDate := DSTDate2Date(TZ.StandardDate, year);
    DaylightBias := TZ.Bias + TZ.DaylightBias;
    StandardBias := TZ.Bias + TZ.StandardBias;
    Result := (DaylightDate <> 0) and (StandardDate <> 0);
  end;
end;

function GetTZDaylightSavingInfo(TZ: TTimeZoneInformation; var DaylightDate, StandardDate: TDateTime; var DaylightBias, StandardBias: longint): boolean;
begin
  Result := GetTZDaylightSavingInfoForYear(TZ, ThisYear, DaylightDate, StandardDate, DaylightBias, StandardBias);
end;

procedure TForm1.FormCreate(Sender: TObject);
const
  OrdNums: array[1..5] of string = ('første', 'anden', 'tredje', 'fjerde', 'sidste');
  MINUTESPERDAY = 1440;
var
  tz: TTimeZoneInformation;
  StartDate: TDateTime;
  EndDate: TDateTime;
  DayBias: longint;
  StdBias: longint;
  DaylightBias: longint;
  StandardBias: longint;
begin
  GetTimeZoneInformation(tz);

  if not GetTZDaylightSavingInfo(TZ, StartDate, EndDate, DaylightBias, StandardBias) then
    exit;

  StdBias := TZ.Bias + TZ.StandardBias;
  DayBias := TZ.Bias + TZ.DaylightBias;

  Memo1.Lines.Add('Sommertid begynder den ...');

  if TZ.DaylightDate.wYear = 0 then
    with TZ.DaylightDate do
      Memo1.Lines.Add(Format('%s %s of %s at %s GMT', [OrdNums[wDay], LongDayNames[wDayOfWeek + 1], LongMonthNames[wMonth], TimeToStr(EncodeTime(wHour, wMinute, wSecond, wMilliseconds) + StdBias / MINUTESPERDAY)]));

  Memo1.Lines.Add('I år : ' + FormatDateTime('c', StartDate));

  Memo1.Lines.Add('Sommertid ender den ...');
  if TZ.StandardDate.wYear = 0 then
    with TZ.StandardDate do
      Memo1.Lines.Add(Format('%s %s i %s klokken %s GMT', [OrdNums[wDay], LongDayNames[wDayOfWeek + 1], LongMonthNames[wMonth], TimeToStr(EncodeTime(wHour, wMinute, wSecond, wMilliseconds) + DayBias / MINUTESPERDAY)]));


  Memo1.Lines.Add('I år : ' + FormatDateTime('c', EndDate));
end;
Avatar billede nop Nybegynder
24. februar 2003 - 14:30 #9
Tak til borrisholt, han får 100 % fra mig !!!!
--nop
Avatar billede morten_s Nybegynder
24. februar 2003 - 14:31 #10
Jens er en stjerne...vi ved det alle
Avatar billede borrisholt Novice
24. februar 2003 - 14:32 #11
TAKKER :-)

Jeg sagde jo det stod der ....

Jens B
Avatar billede morten_s Nybegynder
24. februar 2003 - 14:33 #12
Ja men jeg var nu mest på udkig efter et lille sommer/vintertids flag
Avatar billede nop Nybegynder
24. februar 2003 - 14:33 #13
Kvalificeret til eksperten: Stjerne for en dag !
Avatar billede borrisholt Novice
24. februar 2003 - 14:35 #14
Det torede jeg nu etenlig også der var :-)

Men så måtte jeg jo regne !!!

Jens B
Avatar billede borrisholt Novice
06. marts 2003 - 14:44 #15
Avatar billede borrisholt Novice
06. marts 2003 - 14:39 #16
Avatar billede borrisholt Novice
13. marts 2003 - 13:31 #17
Jeg kan godt grave flere oplysninger frem Hvis du har behov for det ?

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester