2010-08-02 10 views
5

¿Cuál es la mejor manera de configurar el tiempo de la máquina en C#?Establecer el tiempo de la máquina C#

+0

DUP? http://stackoverflow.com/questions/204936/set-time-programmatically-using-c – kenny

+0

@kenny: No lo creo ... eso es hablar de máquinas remotas. –

+0

Ese comentario no es un duplicado exacto, ya que esa pregunta es cómo hacer esto en una máquina remota. –

Respuesta

7

Usted probablemente tendrá que utilizar la API de Win32 para hacer esto, ya que estoy bastante seguro de que no hay nada al horno en el marco:

[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); 

Hay un ejemplo más completo en PInvoke.net, el código es un poco densa , sino un extracto simple que es bastante sencillo de leer y entender es la siguiente:

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 
} 

los específicas de Win32 API son relevantes SetSystemTime, GetSystemTime y la estructura SYSTEMTIME.

+2

Al igual que un aviso, necesitará los permisos del administrador para establecer la hora del sistema. Un usuario estándar no puede cambiar la hora. – Joshua

+1

@Joshua, muy cierto, +1 – Rob

+0

Usted definió SetSystemTime para devolver un bool pero verifica si el resultado == 0. –

1

Microsoft.VisualBasic.DateAndTime.TimeOfDay = dateTime;

agregar una referencia de Microsoft.VisualBasic a proyectar Por favor, hágamelo saber si cualquier edición

Cuestiones relacionadas