SetSystemTime

shader09

Erfahrenes Mitglied
Hallöchen,
Hab das Dtum ausgelesen und verändert. Nun möchte ich aber das
veränderte Datum setzen.

Code:
  GetDlgItemText(IDC_EDT_TAG,lTag);  //So lese ich die veränderten Werte aus
  GetDlgItemText(IDC_EDT_TAG,lMonat);
  GetDlgItemText(IDC_EDT_TAG,lJahr);
  GetDlgItemText(IDC_EDT_TAG,lStunden);
  GetDlgItemText(IDC_EDT_TAG,lMinuten);
  // Wie kann ich die nur wieder setzen
  SetSystemTime(&Datum);
 
Hallo,

zuerst musst du die SYSTEMTIME-Struktur fuellen, um dann mit SetSystemTime die Uhrzeit des Systems zu veraendern.

Header: Windows.h
Code:
typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, 
 *PSYSTEMTIME;
Code:
BOOL WINAPI SetSystemTime(
    const SYSTEMTIME* lpSystemTime
);

Gruss Hallasas
 
Danke aber das wusste ich auch, so ein Anfänger bin ich nun
auch net mehr. Hab es jetzt auch hinbekommen, dass Problem ist
jetzt nur noch mit am/pm. Wie kann ich das einstellen!?

Code:
void CEinstellungDlg::OnBtnEinst() 
{  

  GetDlgItemText(IDC_EDT_TAG,lTag);
  mTag = _ttoi(lTag);

  GetDlgItemText(IDC_EDT_MON,lMonat);
  mMonat = _ttoi(lMonat);
    
  GetDlgItemText(IDC_EDT_JAHR,lJahr);
  mJahr = _ttoi(lJahr);

  GetDlgItemText(IDC_EDT_STU,lStunden);
  mStunden = _ttoi(lStunden);

  GetDlgItemText(IDC_EDT_MIN,lMinuten);
  mMinuten = _ttoi(lMinuten);


  Datum.wDay = mTag;
  Datum.wMonth = mMonat;
  Datum.wYear = mJahr;
  Datum.wHour = mStunden;
  Datum.wMinute = mMinuten;
  //SetLocalTime(&Datum);
  SetSystemTime(&Datum);
}
 
Okay mein Problem hat sich schon erledigt, man muss einfach
nur SetLocalTime() anwenden. Und schon Funktioniert es*freu*
 
SetSystemTime with minGW

Hallo
ich benutze C++ in Eclipse und minGW.
Wenn ich versuche die Systemzeit mit SetSystemTime(&st) zu setzen, tut sich gar nix.
Der Aufruf von GetLastError() liefert mir Fehlercode 10: "ERROR_BAD_ENVIRONMENT".

Woran liegt das?
Kann mir jemand helfen?
Danke
Michael
 
Moin,

Du solltest schon ein paar mehr Infos liefern (inkl. Code)!

Was genau machst Du ?
An welcher Stelle tritt der Fehler auf ?

Gruß
Klaus
 
Hallo

Hab nach einigem rumprobieren herausgefunden, dass es teilweise daran liegt, dass ich es in Exlipse direkt ausführe.
Wenn ich die erzeugte exe-Datei starte, funktioniert es einwandfrei.

Nur zur Info der Testcode, der die Systemzeit um 2 Stunden zurücksetzt:

#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;

SYSTEMTIME tm2systemtime(tm tmZ);

int main() {
tm datumZeit;
time_t Zeitstempel=time(NULL);
datumZeit=*gmtime(&Zeitstempel);

datumZeit.tm_hour--;
datumZeit.tm_hour--;

SYSTEMTIME st=tm2systemtime(datumZeit);
cout << SetSystemTime(&st)<<endl;
cout << GetLastError();
return 0;

}
SYSTEMTIME tm2systemtime(tm tmZ)
{
SYSTEMTIME st;
st.wYear = static_cast<WORD>(tmZ.tm_year+1900);
st.wMonth= static_cast<WORD>(tmZ.tm_mon+1);
st.wDayOfWeek=static_cast<WORD>(tmZ.tm_wday);
st.wDay=static_cast<WORD>(tmZ.tm_mday);
st.wHour=static_cast<WORD>(tmZ.tm_hour);
st.wMinute=static_cast<WORD>(tmZ.tm_min);
st.wSecond=static_cast<WORD>(tmZ.tm_sec);
st.wMilliseconds=0;
return st;
}
 
Hi.

Bitte verwende die Code-Tags für deine Code-Schnipsel.

Warum verwendest du nicht die GetSystemTime() Funktion?

Mit einer tm oder SYSTEMTIME Struktur direkt herumzurechnen ist überhaupt keine gute Idee (was ist wenn tm_hour 0 oder 1 ist?).

Forme die SYSTEMTIME Struktur in eine FILETIME Struktur (SystemTimeToFileTime) um, kopiere diese in eine ULARGE_INTEGER Strukur und verwende 64bit Arithmetik um diese Zeit zu manipulieren.

Gruß
 
Zurück