Comment mettre à jour la date et/ou le temps de l'utiliser .NET
Je suis en train de mettre à jour mon système de temps en utilisant les éléments suivants:
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
[DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
private extern static void Win32GetSystemTime(ref SYSTEMTIME lpSystemTime);
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
private extern static bool Win32SetSystemTime(ref SYSTEMTIME lpSystemTime);
public void SetTime()
{
TimeSystem correctTime = new TimeSystem();
DateTime sysTime = correctTime.GetSystemTime();
//Call the native GetSystemTime method
//with the defined structure.
SYSTEMTIME systime = new SYSTEMTIME();
Win32GetSystemTime(ref systime);
//Set the system clock ahead one hour.
systime.wYear = (ushort)sysTime.Year;
systime.wMonth = (ushort)sysTime.Month;
systime.wDayOfWeek = (ushort)sysTime.DayOfWeek;
systime.wDay = (ushort)sysTime.Day;
systime.wHour = (ushort)sysTime.Hour;
systime.wMinute = (ushort)sysTime.Minute;
systime.wSecond = (ushort)sysTime.Second;
systime.wMilliseconds = (ushort)sysTime.Millisecond;
Win32SetSystemTime(ref systime);
}
Quand je debug tout semble bon et toutes les valeurs sont correctes mais quand il appelle le Win32SetSystemTime(réf systime) ème temps réel du système(durée d'affichage) ne change pas et reste le même. La partie étrange, c'est que lorsque j'appelle la Win32GetSystemTime(réf systime) il me donne la nouvelle mise à jour de temps. Quelqu'un peut-il me donner un peu d'aide sur ce?
comme je vois, TimeSystem est non à partir de la base de classe du système, êtes-vous sûr que TimeSystem ne change pas le temps? essayez de commenter les Win32SetSystemTime(réf systime); ligne
OriginalL'auteur user62958 | 2009-02-06
Vous devez vous connecter pour publier un commentaire.
Partie de votre problème est que vous avez un couple de mauvaise PInvoke signatures. La plupart des notables SetSystemTime doit avoir une valeur de retour void. Voici la signature correcte
De mes soupçons, c'est que la serrure d'une valeur de retour foiré la pile et de la SetSystemTime fonction essentiellement fini par de mauvaises données.
OriginalL'auteur JaredPar
Selon le code que vous avez là, vous n'êtes pas d'incrémentation de l'heure. On dirait que vous êtes réglage de l'heure de votre système à l'exact même temps, comme il était quand vous l'avez appelé Win32GetSystemTime.
Essayer:
Le commentaire de code dans votre code précise "configurer le système de l'horloge avance d'une heure". Vous n'êtes pas de changer l'heure de votre système, simplement parce que vous n'êtes pas le changer. Pour définir un autre temps, vous devez définir la structure que vous envoyez dans la méthode à une heure différente de l'heure actuelle.
OriginalL'auteur David Morton
Cette aide, Cela fonctionne correctement pour l'heure locale de la zone.
OriginalL'auteur mtaskopru
Pas besoin de P/Invoke - il y a un moyen plus simple (mais pas bien connue) disponible auprès de Microsoft.VisualBasic de l'assemblée. Si vous êtes en C#, n'oubliez pas d'ajouter une référence à elle.
Vous pouvez utiliser le
Microsoft.VisualBasic.DateAndTime
classe pour obtenir et modifier la Date ou l'Heure. Les propriétésToday
etTimeOfDay
ont setters qui permettra de faire le change à la date ou de l'heure.Vous avez encore besoin de les privilèges - reportez-vous à la documentation MSDN lien ci-dessous.
Voici un exemple au hasard pour changer l'heure:
De référence sur MSDN: http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.dateandtime(v=vs. 110).aspx
À l'aide de Win32SetSystemTime fonctionne pour moi, mais malheureusement, cela ne fonctionne pas.
OriginalL'auteur Jaans
Le problème est sur l'heure UTC et l'heure locale.
Voir ce lien:
http://www.codeproject.com/Messages/2998246/problem-with-SetSystemTime-fucntion-of-Kernel32-dl.aspx
Espère que cela peut-être utile pour vous.
OriginalL'auteur Lei
OriginalL'auteur erfan
Vous venez de l'un des privilèges de problème, quand je lance ce programme, sans privilèges, il n'est pas de changer la date, mais si je fais clic droit sur le programme, puis cliquez sur exécuter en tant qu'administrateur, ça marche!!!
OriginalL'auteur user2118273