如何改变系统时间
在CMD里用DOS命令,可以很容易地修改系统的当前时间,Time 修改后的时间,Date 修改后的日期。我想所有经历过DOS的都知道这个命令。可是在C#里如何修改系统的当前日期和时间?只能通过调用API函数的做法了。示例代码如下:
其实很简单,代码一看就明白了,示例中只重载了一次SetSystemTime函数,可重载多次。不过要注意的是,原来的API函数是按照你传入的数据是格林尼治时间来计算的,它会把你传入的值当成格林尼治时间,它会结合你机子的时区设置,自动调整。比如我们的时间,它会自动把你传入的值加8个小时,因为我们是东八区,比格林尼治早8个小时。这样也好办,只要传入的值是格林尼治时间就可以了,让它自己去算吧。
using System;
using System.Runtime.InteropServices;
namespace UpdateSystemTime
{
class UpdateTime
{
[STAThread]
static void Main(string[] args)
{
//更改系统当前时间
if (!SystemTime.SetSystemTime(2003,10,20))
{
Console.WriteLine("未能正确修改系统时间!");
}
}
}
[StructLayout(LayoutKind.Sequential)]
public 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")]
public static extern bool SetSystemTime(ref SystemTime st);
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(out SystemTime st);
/// <summary>
/// 更改系统当前时间
/// </summary>
/// <param name="year">年份</param>
/// <param name="mon">月份</param>
/// <param name="day">日期</param>
/// <returns>是否更改成功</returns>
public static bool SetSystemTime(int year,int mon,int day)
{
SystemTime st = new SystemTime();
st.wYear = (ushort)year;
st.wMonth = (ushort)mon;
st.wDay = (ushort)day;
return SetSystemTime(ref st);
}
}
}
using System.Runtime.InteropServices;
namespace UpdateSystemTime
{
class UpdateTime
{
[STAThread]
static void Main(string[] args)
{
//更改系统当前时间
if (!SystemTime.SetSystemTime(2003,10,20))
{
Console.WriteLine("未能正确修改系统时间!");
}
}
}
[StructLayout(LayoutKind.Sequential)]
public 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")]
public static extern bool SetSystemTime(ref SystemTime st);
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(out SystemTime st);
/// <summary>
/// 更改系统当前时间
/// </summary>
/// <param name="year">年份</param>
/// <param name="mon">月份</param>
/// <param name="day">日期</param>
/// <returns>是否更改成功</returns>
public static bool SetSystemTime(int year,int mon,int day)
{
SystemTime st = new SystemTime();
st.wYear = (ushort)year;
st.wMonth = (ushort)mon;
st.wDay = (ushort)day;
return SetSystemTime(ref st);
}
}
}
其实很简单,代码一看就明白了,示例中只重载了一次SetSystemTime函数,可重载多次。不过要注意的是,原来的API函数是按照你传入的数据是格林尼治时间来计算的,它会把你传入的值当成格林尼治时间,它会结合你机子的时区设置,自动调整。比如我们的时间,它会自动把你传入的值加8个小时,因为我们是东八区,比格林尼治早8个小时。这样也好办,只要传入的值是格林尼治时间就可以了,让它自己去算吧。