想写一个程序,把本机时间和Internet上的时间服务器的时间同步,应该如何做??

解决方案 »

  1.   

    没有别的方法了吗??好像Windows自带的时间同步一样!他是怎么做的呢??听说有个什么协议的!!
      

  2.   

    不需要实时同步 只要点一下按钮 然后同步时间 应该怎么做?? 就像Windowxp自带的那样
      

  3.   

    用api函数SetSystemTimeusing 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();
        }
     }
    }至于取远程服务器的时间,得需要远程服务器提供一个取时间的接口