Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set machine time C#

Tags:

c#

time

set

What is the best way to set the machine time in C#?

like image 799
Dustin Kendall Avatar asked Aug 02 '10 20:08

Dustin Kendall


1 Answers

You'll probably need to use the Win32 API to do this, as I'm fairly sure there's nothing baked into the framework:

[StructLayout(LayoutKind.Sequential)] 
public struct SYSTEMTIME { 
 public short wYear; 
 public short wMonth; 
 public short wDayOfWeek; 
 public short wDay; 
 public short wHour; 
 public short wMinute; 
 public short wSecond; 
 public short wMilliseconds; 
 } 
 [DllImport("kernel32.dll", SetLastError=true)] 
public static extern bool SetSystemTime(ref SYSTEMTIME theDateTime );

There's a fuller example at PInvoke.net, the code's a bit dense, but a simple excerpt that's fairly plain to read and understand is this:

SYSTEMTIME st = new SYSTEMTIME();
GetSystemTime(ref st);
// Adds one hour to the time that was retrieved from GetSystemTime
st.wHour = (ushort)(st.wHour + 1 % 24);
var result = SetSystemTime(ref st);
if (result == false)
{
     // Something went wrong
}
else
{
    // The time will now be 1hr later than it was previously
}

The relevant specific Win32 API's are SetSystemTime, GetSystemTime and the SYSTEMTIME structure.

like image 127
Rob Avatar answered Sep 29 '22 21:09

Rob