zoukankan      html  css  js  c++  java
  • C#技术点--修改系统时间

    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函数库
    //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 SetLocalTime( ref SYSTEMTIME Time );
            [DllImport("Kernel32.dll")]
            public static extern void GetLocalTime(ref SYSTEMTIME Time);
        }
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
        //取得当前系统时间
        DateTime t = DateTime.Now;
        //在当前时间上加上一周
        t = t.AddDays(7);
        //转换System.DateTime到SYSTEMTIME
        SYSTEMTIME st = new SYSTEMTIME();
        st.FromDateTime(t);
        //调用Win32 API设置系统时间
        Win32API.SetLocalTime(ref st);
        //显示当前时间
        MessageBox.Show(DateTime.Now.ToString());
    }
  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/zty1294625258/p/6084672.html
Copyright © 2011-2022 走看看