コンピュータネットワークの時刻同期時のC#

最近のコンピュータがネットワーク時間を変更することはできませんので、時間の使用を制御するためのソフトウェアを必要とするプロジェクトに遭遇し、それがネットワークに接続されたコンピュータネットワークの時刻同期を行う必要があります

以下のように、ソリューションの多くを見つけるためにインターネット:

//Forproc_Win32.cs
//の宣言共通のWin32 API関数と構成
システムを使用して、
System.Runtime.InteropServicesを使用して、
 
名前空間Farproc.Win32
{
    /// <まとめ>
    ///
    /// </要約>
    SYSTEMTIME構造体公衆
    {
        公共USHORT wYear;
        公共USHORT wMonth;
        公共USHORT wDayOfWeek;
        公共USHORT WDAY;
        公共USHORT wHour;
        公共USHORT wMinute;
        公共USHORTのwSecond;
        公共USHORTのwMilliseconds;
 
        /// <まとめ>
        のSystem.DateTimeから///変換。
        /// </要約>
        。/// <PARAM NAME = "時間">のSystem.DateTime类型的时间</ PARAM>
        公共ボイドFromDateTime(日時時間)
        {
            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。
        }
        /// <要約>
        ///转换为のSystem.DateTime类型。
        /// </要約>
        /// <戻る> </戻ります>


            新しい日時(wYear、wMonth、wDay、wHour、wMinute、wSecond、wMilliseconds)を返します。
        }
        /// <要約>
        ///静态方法。转换为のSystem.DateTime类型。
        /// </要約>
        /// <PARAM NAME = "時間"> SYSTEMTIME类型的时间</ PARAM>
        /// <リターン> </戻る>
        パブリック静的日時ToDateTime(SYSTEMTIME時間)
        {
            )(time.ToDateTimeを返します。
        }
    }
 publicクラスのWin32API
    {
        [DLLIMPORT( "Kernel32.dllの")]
        パブリック静的にexternのブールSetLocalTime(REF SYSTEMTIME時間)。
        [DLLIMPORT( "Kernel32.dllの"

    }
}
プライベートボイドのbutton1_Click(オブジェクト送信者、System.EventArgs E)
{
    //現在のシステム時刻を取得
    日時TはDateTime.Nowを=;
    //現在の時刻にプラス一週間
    (7)Tが= t.AddDays;
    //変換システムSYSTEMTIMEに.DateTime
    ; SYSTEMTIME SYSTEMTIME新しい新しいST =()
    st.FromDateTime(T);
    // Win32 APIの呼び出しシステム時刻を設定
    Win32API.SetLocalTime(REF STを);
    //現在の時間
    MessageBox.Show(DateTime.Now.ToString( ));
}

私は何度も試してみましたし、正しく修正することができませんでした。

その後気まぐれ、cmdはシステム時刻を変更することはできませんか?

そして、成功したCMDコマンド機能を使用します。

/// <要約>  
        ///获取网络日期时间  
        /// </要約>  
        /// <戻る> </戻り>  
        パブリック静的文字列GetNetDateTime()
        {
            WebRequestクラスリクエスト= NULL;
            WebResponse応答= NULL;
            WebHeaderCollection headerCollection = NULL;
            文字列のdatetime = String.Emptyを。
            試す
            {
                リクエスト= WebRequest.Createを( "https://www.baidu.com")。
                request.Timeout = 3000。
                request.Credentials = CredentialCache.DefaultCredentials。
                応答=(にWebResponse)request.GetResponse();
                headerCollection = response.Headers。
                foreachの(headerCollection.AllKeysでのvar H)
                {IF(H == "日"){日時= headerCollection [H]。}}
                日時を返します。
            }
            キャッチ(例外){日時を返します。}
            最後に
            、{
                (!リクエスト= NULL)であれば
                {request.Abort()。}
                (応答= NULL!)なら
                、{response.Close()。}
                IF(!headerCollection = NULL)
                {headerCollection.Clear()。}
            }
        }

//コールシステム時刻修正CMD
        パブリック静的ボイドSetSystemTime(日時NetTime)を
        {
            System.Diagnostics.Process System.Diagnostics.Process新しい新しいP =();
            p.StartInfo.FileName = "cmd.exeの";
            p.StartInfo.UseShellExecute =偽; //オペレーティングシステムのシェルを使用することを開始するかどうかを
            p.StartInfo.RedirectStandardInput =真; //呼び出し元のからの入力を受け付け
            p.StartInfo.RedirectStandardOutput =真;呼び出し元のプログラムによって取得//出力情報
            真p.StartInfo.RedirectStandardError = ; //標準エラー出力のリダイレクト
            p.StartInfo.CreateNoWindow =真; //が表示されないウィンドウ
            p.Startを();プログラム開始//

            文字列dtdate = netTime.ToStringを( "YYYY- MM-DD"); // 取得日の
            文字列dttime = netTime.ToString( "HH: MM:SS"); // 時間を取得
            文字列dos1 = "日付" + dtdate ; // コマンド1。
            文字列DOS 2 = "時間" + dttime; //コマンド2
            p.StandardInput.WriteLine(DOS1 + "&" + DOS 2 + "&終了");
            p.StandardInput.AutoFlush真=へ;
            文字列= p.StandardOutput.ReadToEnd出力();
            p.WaitForExit(); //プロセス終了終了するプログラムを待っている
            p.Closeを();
        }

おすすめ

転載: www.cnblogs.com/jianliu/p/11206971.html