使用C#设置系统时间(不同于以往的文章,是经过测试的)

类别:.NET开发 点击:0 评论:0 推荐:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace WindowsApplication1
{
  [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 wMiliseconds;
  }

  public class Win32
  {
    [DllImport("Kernel32.dll")]
    public static extern bool SetSystemTime( ref SystemTime sysTime );
    [DllImport("Kernel32.dll")]
    public static extern void GetSystemTime(ref SystemTime sysTime);
  }


 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.TextBox textBox2;
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
      this.button1 = new System.Windows.Forms.Button();
      this.textBox1 = new System.Windows.Forms.TextBox();
      this.textBox2 = new System.Windows.Forms.TextBox();
      this.SuspendLayout();
      //
      // button1
      //
      this.button1.Location = new System.Drawing.Point(188, 174);
      this.button1.Name = "button1";
      this.button1.TabIndex = 0;
      this.button1.Text = "button1";
      this.button1.Click += new System.EventHandler(this.button1_Click);
      //
      // textBox1
      //
      this.textBox1.Location = new System.Drawing.Point(56, 12);
      this.textBox1.Name = "textBox1";
      this.textBox1.Size = new System.Drawing.Size(510, 21);
      this.textBox1.TabIndex = 1;
      this.textBox1.Text = "textBox1";
      //
      // textBox2
      //
      this.textBox2.Location = new System.Drawing.Point(58, 50);
      this.textBox2.Name = "textBox2";
      this.textBox2.Size = new System.Drawing.Size(506, 21);
      this.textBox2.TabIndex = 2;
      this.textBox2.Text = "textBox2";
      //
      // Form1
      //
      this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
      this.ClientSize = new System.Drawing.Size(602, 273);
      this.Controls.Add(this.textBox2);
      this.Controls.Add(this.textBox1);
      this.Controls.Add(this.button1);
      this.Name = "Form1";
      this.Text = "Form1";
      this.ResumeLayout(false);

    }
  #endregion

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

    private void button1_Click(object sender, System.EventArgs e)
    {
      textBox1.Text = DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString();
      SystemTime sysTime = new SystemTime();

      sysTime.wYear = Convert.ToUInt16(DateTime.Now.Year);
      sysTime.wMonth = Convert.ToUInt16(DateTime.Now.Month);
      //处置北京时间
      int nBeijingHour = DateTime.Now.Hour - 8;
      if (nBeijingHour <= 0)
      {
        nBeijingHour += 24;
        sysTime.wDay= Convert.ToUInt16(DateTime.Now.Day - 1);
        sysTime.wDayOfWeek = Convert.ToUInt16(DateTime.Now.DayOfWeek - 1);
      }
      else
      {
        sysTime.wDay= Convert.ToUInt16(DateTime.Now.Day);
        sysTime.wDayOfWeek = Convert.ToUInt16(DateTime.Now.DayOfWeek);
      }
      sysTime.wHour = Convert.ToUInt16(nBeijingHour);
      sysTime.wMinute = Convert.ToUInt16(DateTime.Now.Minute);
      sysTime.wSecond = Convert.ToUInt16(DateTime.Now.Second);
      sysTime.wMiliseconds = Convert.ToUInt16(DateTime.Now.Millisecond);
 
      Win32.SetSystemTime(ref sysTime);
      textBox2.Text = DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString();
    }


 }
}

本文地址:http://com.8s8s.com/it/it43542.htm