日期:2014-03-12  浏览次数:20431 次

一、改变系统时间C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员。用过VC、VB等的朋友可能知道,我们可以调用Win32 API SetLocalTime来改变系统时间,看来C#中也只能如此了。SetLocalTime需要一个SYSTEMTIME结构指针作为参数,这倒不难,我们可以“比葫芦画瓢”很快在C#中定义这个结构,但问题是,我同时还想“享受”.NET Framework的System.DateTime在时间转换和处理方面的便利,怎么办?只有自己动手了,为我们的C#中的SYSTEMTIME编写成员函数,实现和System.DateTime之间的互转。请看下面的代码:首先我为了以后调用方便,新建了一个C#文件,在里面把SetLocalTime API放到一个名称为Win32API的类中,并把这个类放到我自己定义的namespace中,避免名称冲突。以后我还可以不断向这个类和名称空间添加常用的API,以便构造我自己的C# Win32 API函数库J//Forproc_Win32.cs//对常用Win32 API函数及结构的声明using System;using System.Runtime.InteropServices; namespace Farproc.Win32{    /// <summary>    ///     /// </summary>    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;         /// <summary>        /// 从System.DateTime转换。        /// </summary>        /// <param name="time">System.DateTime类型的时间。</param>        public void FromDateTime(DateTime time)        {            wYear = (ushort)time.Year;            wMonth = (ushort)time.Month;            wDayOfWeek = (ushort)time.DayOfWeek;            wDay = (ushort)time.Day;            wHour = (ushort)time.Hour;            wMinute = (ushort)time.Minute;            wSecond = (ushort)time.Second;            wMilliseconds = (ushort)time.Millisecond;        }        /// <summary>        /// 转换为System.DateTime类型。        /// </summary>        /// <returns></returns>        public DateTime ToDateTime()        {            return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);        }        /// <summary>        /// 静态方法。转换为System.DateTime类型。        /// </summary>        /// <param name="time">SYSTEMTIME类型的时间。</param>        /// <returns></returns>        public static DateTime ToDateTime(SYSTEMTIME time)        {            return time.ToDateTime();        }    }    public class Win32API    {        [DllImport("Kernel32.dll")]        public static extern bool SetLocal