Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Softwaretests und Qualitätssicherung (https://www.delphipraxis.net/86-softwaretests-und-qualitaetssicherung/)
-   -   Wie Umstellung Sommver/Winterzeit testen? (https://www.delphipraxis.net/199943-wie-umstellung-sommver-winterzeit-testen.html)

TomyN 4. Mär 2019 13:23

Wie Umstellung Sommver/Winterzeit testen?
 
Hallo,
meine Software schreibt periodisch Werte in eine Liste, inkl. der Uhrzeit.
Nun würde ich gerne auch bei der Umstellung Sommer - Winterzeit (und umgekehrt) korrekt aufzeichnen.
Dabei stellt sich die Frage der Testbarkeit (immer auf die nächste reale Umstellung zu warten erscheint mir doch etwas langsam).

Frage: Kann man windows dazu bringen, eine Umschaltung durchzuführen/zu simulieren? Oder andersherum, unterscheidet sich die Umschaltung Sommer/Winterzeit von einer 'normalen' Zeitzonenumschaltung?

Klaus01 4. Mär 2019 13:36

AW: Wie Umstellung Sommver/Winterzeit testen?
 
.. irgenwoher bekommt doch Deine Routine die Uhrzeit?
Kannst Du da nicht die Zeitquelle mocken/überschreiben?

Grüße
Klaus

TigerLilly 4. Mär 2019 14:16

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Vielleicht hilft das:
https://www.thewindowsclub.com/chang...e-in-windows-7

TomyN 4. Mär 2019 14:30

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Hi,
ich zeichne aktuell mit Hilfe der Systemzeit auf (und überwache über einen 'parallelen' Timer auf Plausibilität). Um auf die Umstellung zu prüfen, würde ich wm_timechange und GetTimeZoneInformation verwenden wollen.

Uwe Raabe 4. Mär 2019 14:48

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Dieses Tool ist dafür ganz hilfreich: RunAsDate v1.36 - Run a program with the specified date/time

Man will ja nicht immer gleich sein ganzes System umstellen.

Schokohase 4. Mär 2019 14:50

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Wenn du die UTC-Uhrzeit nimmst, dann wärst du schon fertig ... kann allerdings auch zu einfach sein.

TomyN 4. Mär 2019 14:54

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Hi,
UTC wäre gar nicht so blöde, ich müsste dann aber halt doch wieder die Werte in LocalTime ausgeben. Da sich der Offset bei einer Umstellung währende der Aufzeichnung ändert, müsste ich da genauso unterscheiden. Es geht gar nicht so sehr um die Realisierbarkeit, sondern darum, ob es irgendwie sinnvoll testbar ist.
Ich werde gleich mal schauen, ob die Software (danke für den Link) auch den korrekten Status für GetTimeZoneInformation liefert. Die wm_timeChange message kann ich zur Not ja noch 'manuell' senden...

dummzeuch 4. Mär 2019 14:57

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Kannst du nicht einfach die Zeitsynchronisation ausschalten und dann Datum / Uhrzeit auf 5 Minuten vor dem jeweiligen Umschalt-Termin setzen?

Schokohase 4. Mär 2019 14:57

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Bei UTC ändert sich kein Offset und von jedem UTC-Zeitstempel kannst du eindeutig in jede beliebige Zeitzone umrechnen lassen. Andersherum ist das erheblich schwieriger. Darum ja auch UTC speichern.

TomyN 4. Mär 2019 15:03

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Ah … also UTC mitloggen und dann jeden Wert über eine Systemfunktion in Lokale Zeit übersetzen.
Klingt nicht schlecht.
Aber, wie schon geschrieben, ist die Realisierung nicht so das Problem, sondern eher die Testbarkeit..

Schokohase 4. Mär 2019 15:17

AW: Wie Umstellung Sommver/Winterzeit testen?
 
Kleiner Test
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.DateUtils,
  System.SysUtils;

procedure Test;
var
  utc, lt: TDateTime;
begin
  Writeln('Winter- auf Sommerzeit');
  Writeln('----------------------');
  utc := EncodeDateTime(2019, 03, 30, 23, 00, 00, 00);
  while utc <= EncodeDateTime(2019, 3, 31, 02, 00, 00, 00) do
  begin
    lt := TTimeZone.Local.ToLocalTime(utc);
    Writeln('UTC ', FormatDateTime('dd.mm.yyyy hh:nn', utc), ' Local ', FormatDateTime('dd.mm.yyyy hh:nn', lt));
    utc := IncMinute(utc, 15);
  end;
  Writeln;
  Writeln('Sommer- auf Winterzeit');
  Writeln('----------------------');
  utc := EncodeDateTime(2019, 10, 26, 23, 00, 00, 00);
  while utc <= EncodeDateTime(2019, 10, 27, 02, 00, 00, 00) do
  begin
    lt := TTimeZone.Local.ToLocalTime(utc);
    Writeln('UTC ', FormatDateTime('dd.mm.yyyy hh:nn', utc), ' Local ', FormatDateTime('dd.mm.yyyy hh:nn', lt));
    utc := IncMinute(utc, 15);
  end;
end;

begin
  try
    Test;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Ergebnis
Code:
    Winter- auf Sommerzeit
    ----------------------
    UTC 30.03.2019 23:00 Local 31.03.2019 00:00
    UTC 30.03.2019 23:15 Local 31.03.2019 00:15
    UTC 30.03.2019 23:30 Local 31.03.2019 00:30
    UTC 30.03.2019 23:45 Local 31.03.2019 00:45
    UTC 31.03.2019 00:00 Local 31.03.2019 01:00
    UTC 31.03.2019 00:15 Local 31.03.2019 01:15
    UTC 31.03.2019 00:30 Local 31.03.2019 01:30
    UTC 31.03.2019 00:45 Local 31.03.2019 01:45
    UTC 31.03.2019 01:00 Local 31.03.2019 03:00
    UTC 31.03.2019 01:15 Local 31.03.2019 03:15
    UTC 31.03.2019 01:30 Local 31.03.2019 03:30
    UTC 31.03.2019 01:45 Local 31.03.2019 03:45
    UTC 31.03.2019 02:00 Local 31.03.2019 04:00

    Sommer- auf Winterzeit
    ----------------------
    UTC 26.10.2019 23:00 Local 27.10.2019 01:00
    UTC 26.10.2019 23:15 Local 27.10.2019 01:15
    UTC 26.10.2019 23:30 Local 27.10.2019 01:30
    UTC 26.10.2019 23:45 Local 27.10.2019 01:45
    UTC 27.10.2019 00:00 Local 27.10.2019 02:00
    UTC 27.10.2019 00:15 Local 27.10.2019 02:15
    UTC 27.10.2019 00:30 Local 27.10.2019 02:30
    UTC 27.10.2019 00:45 Local 27.10.2019 02:45
    UTC 27.10.2019 01:00 Local 27.10.2019 02:00
    UTC 27.10.2019 01:15 Local 27.10.2019 02:15
    UTC 27.10.2019 01:30 Local 27.10.2019 02:30
    UTC 27.10.2019 01:45 Local 27.10.2019 02:45
    UTC 27.10.2019 02:00 Local 27.10.2019 03:00
Der Test ist also ganz einfach


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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