Compare commits
2 Commits
1160477945
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 1fa2075506 | |||
| 8e32e31121 |
@@ -9,11 +9,10 @@ namespace RTCSync.Options;
|
|||||||
public class SetTimeOption : IOption
|
public class SetTimeOption : IOption
|
||||||
{
|
{
|
||||||
public string Description =>
|
public string Description =>
|
||||||
"Установка времени как в системе, на часах реального времени. Часы будут хранить локальное время (не UTC!). Можно сбросить время до минимального значения используя опцию \"0\".";
|
"Без опций устанавливается время как в системе, в локальный формат (не UTC). Дату и время можно задать вручную в кавычках. Опция \"0\" сбрасывает время на минимальное значение.";
|
||||||
|
|
||||||
public List<string> OptionNames => ["-s", "--set-time"];
|
public List<string> OptionNames => ["-s", "--set-time"];
|
||||||
|
|
||||||
public string OptionValues => "[0]";
|
public string OptionValues => "{\"HH:mm:ss dd.MM.yyyy\", 0}";
|
||||||
|
|
||||||
|
|
||||||
public void Execute(OptionArgs args)
|
public void Execute(OptionArgs args)
|
||||||
@@ -48,12 +47,28 @@ public class SetTimeOption : IOption
|
|||||||
DeviceWriters.SetTime(device, dt);
|
DeviceWriters.SetTime(device, dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (value != null && value != "")
|
||||||
|
{
|
||||||
|
for (var i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var dt = DateTime.Parse(value);
|
||||||
|
DeviceWriters.SetTime(device, dt);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (var i = 0; i < 3; i++)
|
for (var i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
// FIXME: вызывает падение на windows 7
|
// FIXME: вызывает падение на windows 7
|
||||||
var dt = DateTime.Now;
|
var dt = WindowsTimeUtils.Now();
|
||||||
DeviceWriters.SetTime(device, dt);
|
DeviceWriters.SetTime(device, dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,17 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<PublishAot>true</PublishAot>
|
<PublishAot>true</PublishAot>
|
||||||
|
<TrimMode>link</TrimMode>
|
||||||
|
<TrimmerSingleWarn>false</TrimmerSingleWarn>
|
||||||
<InvariantGlobalization>true</InvariantGlobalization>
|
<InvariantGlobalization>true</InvariantGlobalization>
|
||||||
<RootNamespace>RTCSync</RootNamespace>
|
<RootNamespace>RTCSync</RootNamespace>
|
||||||
|
<IlcOptimizationPreference>Size</IlcOptimizationPreference>
|
||||||
|
<IlcDisableReflection>true</IlcDisableReflection>
|
||||||
|
<OptimizationPreference>Speed</OptimizationPreference>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="LibUsbDotNet" Version="3.0.224" />
|
<PackageReference Include="LibUsbDotNet" Version="3.0.224"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -7,20 +7,39 @@ public abstract class WindowsTimeUtils
|
|||||||
// c# datetime set
|
// c# datetime set
|
||||||
[DllImport("kernel32.dll")]
|
[DllImport("kernel32.dll")]
|
||||||
public static extern bool SetSystemTime(ref SystemTime time);
|
public static extern bool SetSystemTime(ref SystemTime time);
|
||||||
|
|
||||||
[DllImport("kernel32.dll")]
|
[DllImport("kernel32.dll")]
|
||||||
public static extern void GetSystemTime(ref SystemTime time);
|
public static extern void GetSystemTime(ref SystemTime time);
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
public struct SystemTime(DateTime dt)
|
public struct SystemTime
|
||||||
{
|
{
|
||||||
public ushort Year = (ushort)dt.Year;
|
public ushort Year, Month, DayOfWeek, Day;
|
||||||
public ushort Month = (ushort)dt.Month;
|
public ushort Hour, Minute, Second, Milliseconds;
|
||||||
public ushort DayOfWeek = (ushort)dt.DayOfWeek;
|
|
||||||
public ushort Day = (ushort)dt.Day;
|
public SystemTime() { }
|
||||||
public ushort Hour = (ushort)dt.Hour;
|
|
||||||
public ushort Minute = (ushort)dt.Minute;
|
public SystemTime(DateTime dt)
|
||||||
public ushort Second = (ushort)dt.Second;
|
{
|
||||||
public ushort Milliseconds = (ushort)dt.Millisecond;
|
Year = (ushort)dt.Year;
|
||||||
|
Month = (ushort)dt.Month;
|
||||||
|
DayOfWeek = (ushort)dt.DayOfWeek;
|
||||||
|
Day = (ushort)dt.Day;
|
||||||
|
Hour = (ushort)dt.Hour;
|
||||||
|
Minute = (ushort)dt.Minute;
|
||||||
|
Second = (ushort)dt.Second;
|
||||||
|
Milliseconds = (ushort)dt.Millisecond;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Фикс для Windows 7 SP1 без обновлений
|
||||||
|
// DataTime.Now использует слишком новый API
|
||||||
|
public static DateTime Now()
|
||||||
|
{
|
||||||
|
var st = new SystemTime();
|
||||||
|
GetSystemTime(ref st);
|
||||||
|
return new DateTime(st.Year, st.Month, st.Day,
|
||||||
|
st.Hour, st.Minute, st.Second, st.Milliseconds,
|
||||||
|
DateTimeKind.Utc).ToLocalTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user