ネットに時間を問い合わせるのはいいけど、実際に時刻設定はどうするのって事よね。
これには複数の方法があるらしいわ。
Vista以降のWindowsだと、たぶん管理者(Administrator)じゃないとプログラムから時刻変更できないのよね。何もなくスルーされるかエラーになるはずよ。
そんな時は「 管理者で実行 」してね。
実はVB.NETにAPIがあるらしいのね。でも個人的理由から今回は避けます。
すごく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); }
Formsの記事はバッチリだし、とにかく細かいTipsが素晴らしいの。さすが老舗よね。
反面、WPFの記事がないので百%頼りきりはまずい(※)と思うけど、それを差し置いてあまりある内容よ。先人の知恵に感謝しつつ見せていただきましょう。
(※:たとえばWPFのコンポーネント使いたい時、ここと一部の情報記事だけ見ていると、WPFにはwebBrowserがないとか勘違いする事があるみたいなの。上記サイトの情報は本当に素晴らしいんだけど、素晴らしいがゆえに気をつけましょうって事ね)