ntpサーバに問い合わせ
.NET

ネットに時間を問い合わせるのはいいけど、実際に時刻設定はどうするのって事よね。

これには複数の方法があるらしいわ。

時刻合わせ時の注意

Vista以降のWindowsだと、たぶん管理者(Administrator)じゃないとプログラムから時刻変更できないのよね。何もなくスルーされるかエラーになるはずよ。

そんな時は「 管理者で実行 」してね。

設定方法

VB.NETを使う方法

実はVB.NETにAPIがあるらしいのね。でも個人的理由から今回は避けます。

WindowsのDLLを使う方法

すごくWindows的な解法だけど、ちゃんと動くわ。
なお、このコードのオリジナルは、 こっち ね。今回は苦手分野なので全面的にお世話になったの。さすがの老舗よね。

using System.Runtime.InteropServices;
:
: 
[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;
}
[DllImport("kernel32.dll")]
public static extern bool SetLocalTime(
   ref SystemTime sysTime);

/// <summary>
/// 現在のシステム日時を設定する
/// </summary>
/// <param name="dt">設定する日時</param>
public static void SetNowDateTime(DateTime dt)
{
   //システム日時に設定する日時を指定する
   SystemTime sysTime = new SystemTime();
   sysTime.wYear = (ushort) dt.Year;
   sysTime.wMonth = (ushort) dt.Month;
   sysTime.wDay = (ushort) dt.Day;
   sysTime.wHour = (ushort) dt.Hour;
   sysTime.wMinute = (ushort) dt.Minute;
   sysTime.wSecond = (ushort) dt.Second;
   sysTime.wMiliseconds = (ushort) dt.Millisecond;
   //システム日時を設定する
   SetLocalTime(ref sysTime);
}

本ページの記事の参考にしたサイト

システム時計の日時を設定する(DOBON.NET)
http://dobon.net/vb/dotnet/system/setlocaltime.html

Formsの記事はバッチリだし、とにかく細かいTipsが素晴らしいの。さすが老舗よね。

反面、WPFの記事がないので百%頼りきりはまずい(※)と思うけど、それを差し置いてあまりある内容よ。先人の知恵に感謝しつつ見せていただきましょう。

(※:たとえばWPFのコンポーネント使いたい時、ここと一部の情報記事だけ見ていると、WPFにはwebBrowserがないとか勘違いする事があるみたいなの。上記サイトの情報は本当に素晴らしいんだけど、素晴らしいがゆえに気をつけましょうって事ね)


トップ   編集 凍結解除 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-15 (月) 08:06:31