C# でローカル マシンの Windows タイム ゾーンをプログラムで設定するにはどうすればよいですか? リモート ユニットにはユーザー インターフェイスやユーザーがないため、対話型ツールを使用することはできません。リモート マシンは .NET 2.0 と Windows XP Embedded を実行しており、タスクの自動指示のために (Web サービス経由で) 中央サーバーと通信するローカル アプリを実行しています。特定の時間/ゾーンの組み合わせに同期するコマンドを配信できますが、変更を行うためにローカル アプリに配置できるコードは何ですか? 機器は設置前に特定の場所でイメージ化されていないため、場所を問わず機器を使用するには、この情報を同期できる必要があります。
6 に答える
SetTimeZoneInformationは、必要なことを行う必要があります。これを取得するには、 P/Invokeを使用する必要があります。
SE_TIME_ZONE_NAME 権限を所有して有効にする必要があることにも注意してください。
これは Windows 7 では機能しません。次の環境で試しました Windows 7 VSTS-2008 手動で行っているように、[タイム ゾーンの変更] ウィンドウを開いています。
santosh あなたは間違いなく正しいです。RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z %1 は何年も前から廃止されており、Windows 2008、R2、Vista、7 などでは実行されません。エンターキーの認識に完全なバグがあるようです。いつかプログラマーがその問題を解決するかもしれません。
一部のシステムのタイムゾーンを設定するだけでなく、Windowsタイムサービスの使用を検討する必要があります。タイムゾーンを処理するだけではありません。また、日付と時刻自体の正しい設定にも注意を払います。
ご覧ください:WindowsXPでWindowsTimeサービスと時刻を同期する方法
VistaまたはWindows7内でこれらすべての設定を行う場合でも、ここでこれを確認してください。
これを試して...
まず、レジストリで、目的のゾーンを表すキーを見つける必要があります(「Central Standard Time」は一例です)。それらはここにあります:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\Time Zones
そのため、次の行を含むバッチ ファイル「SetTimeZone.bat」を作成します。
RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z %1
C# から、次のように呼び出します。
System.Diagnostics.Process.Start("SetTimeZone.bat", "設定したいタイムゾーンのキー");
日付の送信に UTC を使用しないと、誤ったデータが含まれるリスクがあります... デバイスのタイム ゾーンを変更すると、日付がさらにずれます。
UTC を使用してから、各タイムゾーンで時間を計算することができます。