AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wann beginnt bei einem Jahr x die Sommerzeit ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wann beginnt bei einem Jahr x die Sommerzeit ?

Ein Thema von hoika · begonnen am 10. Jan 2014 · letzter Beitrag vom 14. Jan 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 17:38
Hallo #,

aus ptb.de

Zitat:
Die mitteleuropäische Sommerzeit (MESZ) beginnt jeweils am letzten Sonntag im Monat März um 2 Uhr mitteleuropäischer Zeit. An diesem Tag werden die Uhren um 2 Uhr um eine Stunde auf 3 Uhr vorgestellt. Ziel der Zeitumstellung ist die bessere Ausnutzung der Tageshelligkeit.

Die Sommerzeit endet jeweils am letzten Sonntag im Monat Oktober um 3 Uhr mitteleuropäischer Sommerzeit. An diesem Tag werden die Uhren um 3 Uhr auf 2 Uhr zurückgestellt. Bei dieser doppelt erscheinenden Stunde wird die erste Stunde als 2A und die zweite Stunde als 2B bezeichnet.
Wir sind faul:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  tz : TTimeZoneInformation;
  tdtTimeStart : TDateTime;
  tdtTimeEnd : TDateTime;
  sText : string;
begin
  GetTimeZoneInformation(tz);

  tz.DaylightDate.wYear := 2014;
  tz.StandardDate.wYear := 2014;

  tdtTimeStart := SystemTimeToDateTime(tz.DaylightDate);
  tdtTimeEnd := SystemTimeToDateTime(tz.StandardDate);

  sText := 'Start: '+DateToStr(tdtTimeStart)+#13#10+
           'Ende: '+DateToStr(tdtTimeEnd);

  MessageBox(0, PChar(sText), '', 0);
end;
Aber: Es kommt 5.3. raus beim Start.

Ich könnte dass bissel auch per Funktion schreiben,
will ich aber nicht oder muss ich doch ???


Heiko
Heiko
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 17:52
http://delphiforfun.org/Programs/Mat...cs/DSTCalc.htm
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 18:53
Du solltest mal die Dokumentation lesen.
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

5.3. heißt nicht, daß es der 05.03. ist

Denn Jahr = 0, also ist das ein relativer Datumswert.
Nur wenn Jahr einen Wert enthält, ist es ein absolutes Datum, was man so direkt verwenden kann.

05.03.0000 = 3. Monat und 5. "Woche"
wDayOfWeek gibt den Wochentag an und davon muß der 5 in diesem Monat verwendet werden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Jan 2014 um 18:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 19:06
Auch nicht ganz. In DayLightDate bedeuten die Felder Folgendes:
  • wYear - Wenn 0, dann treffen die weiteren Regeln zu. Wenn <> 0 handelt es sich um ein festes Datum, z.b. einmalige Umstellung.
  • wHour - Umstellungsstunde
  • wMinute - Umstellungsminute
  • wDayOfWeek - Wochentag (0 = Sonntag)
  • wDay - Am wievielten durch wDayOfWeek angegebener Wochentag des Monats erfolgt die Umstellung(1-5, 5 bedeutet letzter)
Wichtig ist: Es handelt sich um eine reine Informationsstruktur über die Konfigurationsregelen der Zeitzone. Die Errechnung eines konkreten Datums muß selber gemacht werden!
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 19:08
Hallo,

war ein langer Tag heute,
der erste Link klappt bei 2014 nicht mal mit dem Taschenrechner,
der zweite ist ja noch komplizierter ...
ich baue mir jetzt eine eigene Funktion.

Select StartSommerZeit From RDB$DataBase ...

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 10. Jan 2014, 21:08
So?

siehe erstes IF im ConvertDate

Delphi-Quellcode:
uses
  Windows, SysUtils, DateUtils, Math;

type
  TTimeZoneInformationHelper = record helper for TTimeZoneInformation
  public const
    CurrentYear = 0;
    NextDates = 1;
  private
    procedure ConvertDate(var Date: TSystemTime; IsDaylight, DoNextDates: Boolean; RelDate: TSystemTime);
    function GetDate(Index: Integer): TDateTime;
    function GetDateStr(Index: Integer): string;
  public
    procedure ReadInfo(Year: Word=NextDates; DoConvertDates: Boolean=True);
    procedure ConvertDates(DoNextDates: Boolean=False); overload;
    procedure ConvertDates(DoNextDates: Boolean; RelDate: TSystemTime); overload;

    property GetStandardDate: TDateTime index 0 read GetDate;
    property GetDaylightDate: TDateTime index 1 read GetDate;
    property GetStandardDateStr: string index 0 read GetDateStr;
    property GetDaylightDateStr: string index 1 read GetDateStr;
  end;

{ TTimeZoneInformationHelper }

procedure TTimeZoneInformationHelper.ConvertDate(var Date: TSystemTime; IsDaylight, DoNextDates: Boolean; RelDate: TSystemTime);
var
  NextZone: TTimeZoneInformation;
  NewDate: TDateTime;
begin
  if Date.wYear = 0 then begin
    Date.wYear := RelDate.wYear;
    if Date.wDay < 5 then
      Date.wDay := DayOf(EncodeDayOfWeekInMonth(Date.wYear, Date.wMonth, Date.wDay, IfThen(Date.wDayOfWeek = 0, 7, Date.wDayOfWeek)))
    else begin
      NewDate := EncodeDayOfWeekInMonth(Date.wYear, Date.wMonth, 1, IfThen(Date.wDayOfWeek = 0, 7, Date.wDayOfWeek));
      while MonthOf(NewDate) = MonthOf(IncWeek(NewDate)) do
        NewDate := IncWeek(NewDate);
      Date.wDay := DayOf(NewDate);
    end;
  end;
  if DoNextDates and (SystemTimeToDateTime(RelDate) > SystemTimeToDateTime(Date)) then begin
    NextZone.ReadInfo(RelDate.wYear + 1, True);
    if IsDaylight then
      Date := NextZone.DaylightDate
    else
      Date := NextZone.StandardDate;
  end;
end;

procedure TTimeZoneInformationHelper.ConvertDates(DoNextDates: Boolean);
var
  Current: TSystemTime;
begin
  GetLocalTime(Current);
  ConvertDates(DoNextDates, Current);
end;

procedure TTimeZoneInformationHelper.ConvertDates(DoNextDates: Boolean; RelDate: TSystemTime);
begin
  ConvertDate(Self.StandardDate, False, DoNextDates, RelDate);
  ConvertDate(Self.DaylightDate, True, DoNextDates, RelDate);
end;

function TTimeZoneInformationHelper.GetDate(Index: Integer): TDateTime;
begin
  if Index = 0 then
    Result := SystemTimeToDateTime(Self.StandardDate)
  else
    Result := SystemTimeToDateTime(Self.DaylightDate);
end;

function TTimeZoneInformationHelper.GetDateStr(Index: Integer): string;
begin
  Result := DateTimeToStr(GetDate(Index));
end;

procedure TTimeZoneInformationHelper.ReadInfo(Year: Word; DoConvertDates: Boolean);
begin
  if Year in [CurrentYear, NextDates] then begin
    if GetTimeZoneInformation(Self) = TIME_ZONE_ID_INVALID then
      RaiseLastOSError;
  end else
    if not GetTimeZoneInformationForYear(Year, nil, Self) then
      RaiseLastOSError;

  if DoConvertDates then
    ConvertDates(Year = NextDates);
end;
Delphi-Quellcode:
var
  TZI: TTimeZoneInformation;
begin
  TZI.ReadInfo;
  ShowMessage('Start: ' + TZI.GetStandardDateStr + sLineBreak + 'Ende: ' + TZI.GetDaylightDateStr);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Jan 2014 um 16:28 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 11. Jan 2014, 11:24
Wäre es möglich, das das so einfach geht?
Delphi-Quellcode:
Function AnfangDerSommerzeit(Jahr : Word) : TDateTime;
Begin
  result := EncodeDate(Jahr,4,1);
// return result - DayOfWeek(Result); // Letzter Sonntag im März
  result := result - DayOfWeek(Result);
End;

Function EndeDerSommerzeit(Jahr : Word) : TDateTime;
Begin
  result := EncodeDate(Jahr,11,1);
// return result - DayOfWeek(Result); // Letzter Sonntag im Oktober
  result := result - DayOfWeek(Result);
End;

Geändert von Furtbichler (11. Jan 2014 um 16:28 Uhr) Grund: C# -return auskommentiert. Danke Codix32
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#8

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 11. Jan 2014, 13:15
Wäre es möglich, das das so einfach geht?
Delphi-Quellcode:
Function AnfangDerSommerzeit(Jahr : Word) : TDateTime;
Begin
  result := EncodeDate(Jahr,4,1);
  return result - DayOfWeek(Result); // Letzter Sonntag im März
End;

Function EndeDerSommerzeit(Jahr : Word) : TDateTime;
Begin
  result := EncodeDate(Jahr,11,1);
  return result - DayOfWeek(Result); // Letzter Sonntag im Oktober
End;

Hilfe Furtbichler,

was macht denn das 'return' da drin?
Ist das 'return' nicht eher was für C++ ?

Das erinnert mich irgendwie auch an Basic, aber ehrlich, ich verstehe die Funktion so nicht.

Ich habe Deine Funktion in meinem Delphi getestet und so geht sie dann:
Delphi-Quellcode:
Function TForm1.AnfangDerSommerzeit(Jahr : Word) : TDateTime;
Begin
   result := EncodeDate(Jahr,4,1);
   result:= (result - DayOfWeek(Result))+1; // Letzter Sonntag im März
End;

Function TForm1.EndeDerSommerzeit(Jahr : Word) : TDateTime;
Begin
   result := EncodeDate(Jahr,11,1);
   result:= (result - DayOfWeek(Result))+1; // Letzter Sonntag im Oktober
End;
Hm, da stellt sich mir noch die Frage, ob die Funktion zwei Resultate blitzschnell und fürs Auge unbemerkt liefert, oder ob das erste 'result' in der Funktion verbleibt...

Geändert von Codix32 (11. Jan 2014 um 14:01 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 11. Jan 2014, 14:57

Hm, da stellt sich mir noch die Frage, ob die Funktion zwei Resultate blitzschnell und fürs Auge unbemerkt liefert, oder ob das erste 'result' in der Funktion verbleibt...
Das erste result wird doch überschrieben.
Mit result wird ja auch nicht aus der Funktion herausgesprungen, daher zählt das was als letztes, bevor die Funktion verlassen wird, in result geschrieben wird.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Wann beginnt bei einem Jahr x die Sommerzeit ?

  Alt 11. Jan 2014, 16:26
was macht denn das 'return' da drin?
C# verdorben, sorry.

Das 'result' ist einfach eine lokale Variable, die Du verwenden kannst. Wie Klaus01 schon richtig schrieb, entspricht sie dem Resultat. Eine Sprunganweisung ist mit der Zuweisung nicht verbunden.

Geändert von Furtbichler (11. Jan 2014 um 16:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 12:03 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