C# SetSystemTime berücksichtigt Winterzeit nicht

Syntexer

Lt. Commander
Registriert
Okt. 2004
Beiträge
1.052
Folgendes Problem, ich versuche über "SetSystemTime" die Uhrzeit zu verstellen.
Funktioniert auch. Allerdings berücksichtigt SetSystemTime anscheinend die Winterzeit nicht.

Wenn ich jetzt z.B. 10:00 setzten möchte wird die Systemzeit auf 11:00 Uhr gesetzt. Wie kann ich das Problem lösen?


Code:
            SYSTEMTIME st = new SYSTEMTIME();            
            st.wYear = (short)iyear;
            st.wMonth = (short)imonth;
            st.wDay = (short)iday;
            st.wHour = (short)ihour;
            st.wMinute = (short)iminute;
            st.wSecond = 0;

            SetSystemTime(ref st);
 
du hast das Land nicht definiert.
 
Das hat nichts mit Winterzeit zu tun. UTC ist das Stichwort. (versuchs mal mit SetLocalTime)
 
SetLocalTime liefert das exakt selbe ergebnis :(
 
Sollte es aber. Das einzige was ich mir hier noch vorstellen könnte:

The system uses UTC internally. Therefore, when you call SetLocalTime, the system uses the current time zone information to perform the conversion, including the daylight saving time setting. Note that the system uses the daylight saving time setting of the current time, not the new time you are setting. Therefore, to ensure the correct result, call SetLocalTime a second time, now that the first call has updated the daylight saving time setting.
 
verstehe ich nicht, was soll es ändern SetLocalTime zweimal aufzurufen!?

soll ich einfach zweimal SetLocalTime(st); aufrufen? das kanns doch nicht sein, ich glaube ich verstehe das falsch :)
 
Zuletzt bearbeitet:
Zwei mal setzen ist für Sommerzeit gedacht, momentan haben wir jedoch Normalzeit (nicht Winterzeit!).
Die Funktionen verhalten sich exakt so wie definiert. Man setzt grundsätzlich nur UTC, du kannst jedoch deine Zeit mit der Zeitzone verrechnen, um aus deiner Lokalzeit die UTC zu errechnen. (TimeZoneInfo->BaseUtcOffset)
 
Zuletzt bearbeitet:
das funktioniert aber doch auch nicht,

wenn ich mir dann mit localZone.BaseUtcOffset.Hours ermittel das wir eben in unserer zeitzone +1 sind, kann ich zwar die eine stunde von der eingegeben zeit abziehen. in der sommerzeit passt die logik dann aber auch schon wieder nicht.
 
@b03ch7: SetLocalTime sollte das Umrechnen von lokalzeit zu UTC übernehmen. Das zweimalige Setzen ist zb. für wenn du von aktueller zeit ("Winterzeit") sagen wir mal, auf den 5 Mai umstellst (Sommerzeit).
 
muss ich um "SetLocalTime" noch irgendwas beachten?
SetLocalTime funktioniert nämlich leider gar nicht.


Code:
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    public static extern int SetLocalTime(SYSTEMTIME lpSysTime);

Code:
 SetLocalTime(st);
 
Sollte analog SetSystemTime funktionieren, hätt ich jetzt gedacht. Ist st richtig gesetzt? Was sagt denn GetLastError?
 
es funktioniert jetzt :)
sehr geil! danke sehr.

hatte die dll falsch eingebunden, so ist es richtig:

Code:
    [DllImport("kernel32.dll")]
    static extern bool SetLocalTime([In] ref SYSTEMTIME lpLocalTime);
 
Zurück
Oben