using RTCSync.Services; using RTCSync.Utils; namespace RTCSync.Options; public class SyncTimeOption : IOption { public string Description => "Синхронизирует системное время со временем модуля реального времени. Если часы хранят UTC время, то используйте опцию universal"; public List OptionNames => ["-S", "--sync-time"]; public string OptionValues => "{local, l, universal, u}"; public void Execute(OptionArgs args) { var device = DeviceDispatcher.SetUpDevice(); if (device == null) return; Console.WriteLine("Время на модуле:"); DeviceReaders.PrintTimeRTC(device); var timeModel = DeviceReaders.GetTimeRTC(device); // время в формате понятном для kernel32 WindowsTimeUtils.SystemTime systime; if (args.OptionValues.TryGetValue("unnamed", out var value) && value is "universal" or "u") systime = new WindowsTimeUtils.SystemTime(timeModel.Time); else if (value is "local" or "l") systime = new WindowsTimeUtils.SystemTime(timeModel.Time.ToUniversalTime()); else systime = new WindowsTimeUtils.SystemTime(timeModel.Time.ToUniversalTime()); Console.WriteLine(WindowsTimeUtils.SetSystemTime(ref systime) ? "Время установлено в системе" : "Ошибка: нет прав администратора"); } }