2010-08-02 28 views
5

Cách tốt nhất để đặt thời gian máy trong C# là gì?Đặt thời gian của máy C#

+0

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

+0

@kenny: Tôi không nghĩ vậy ... đó là nói về máy từ xa. –

+0

Nhận xét đó không phải là một bản sao chính xác, vì câu hỏi đó đang hỏi cách thực hiện điều này trên máy từ xa. –

Trả lời

7

Bạn có lẽ sẽ cần phải sử dụng Win32 API để làm điều này, vì tôi khá chắc chắn không có gì nướng vào khuôn khổ là:

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

Có một ví dụ đầy đủ trong PInvoke.net, mã là một chút dày đặc , nhưng một trích đoạn đơn giản mà khá đơn giản để đọc và hiểu là thế này:

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 
} 

API cụ thể có liên quan Win32 là SetSystemTime, GetSystemTimeSYSTEMTIME cấu trúc.

+2

Cũng giống như một người đứng đầu lên, bạn sẽ cần quyền adminstrator để thiết lập thời gian hệ thống. Người dùng chuẩn không thể thay đổi thời gian. – Joshua

+1

@Joshua, rất đúng, +1 – Rob

+0

Bạn đã xác định SetSystemTime trả về một bool nhưng kiểm tra xem kết quả == 0. –

1

Microsoft.VisualBasic.DateAndTime.TimeOfDay = dateTime;

Thêm tham chiếu của Microsoft.VisualBasic cho bạn dự án Vui lòng cho tôi biết nếu có bất kỳ vấn đề nào

Các vấn đề liên quan