title: How to speed up System Time programmatically?
body: <p>I need to speed up PC System Time by adding a random number of seconds for each (for example) 200 milliseconds. I tried to solve this problem by looking at <a href="https://stackoverflow.com/questions/650849/change-system-date-programmatically">Change system date programmatically</a> thread.</p>
  
  <pre class="lang-cs prettyprint-override"><code>using System;
  using System.Runtime.InteropServices;
  using System.Threading;
  
  namespace TimeSpeedUp
  {
      struct SystemTime
      {
          public ushort Year;
          public ushort Month;
          public ushort DayOfWeek;
          public ushort Day;
          public ushort Hour;
          public ushort Minute;
          public ushort Second;
          public ushort Millisecond;
      }
      class Program
      {
          [DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
          public extern static void Win32GetSystemTime(ref SystemTime sysTime);
  
          [DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
          public extern static bool Win32SetSystemTime(ref SystemTime sysTime);
          public static Random Random = new Random();
  
          static void Main(string[] args)
          {
              Timer timer = new Timer(SetTime);
              timer.Change(0, 200);
              while (true)
              {
                  ConsoleKeyInfo keyInfo = Console.ReadKey(true);
                  if (keyInfo.Key == ConsoleKey.Escape)
                  {
                      break;
                  }
              }
          }
  
          public static void SetTime(object obj)
          {
              // Current time
              SystemTime currentTime = new SystemTime();
              Win32GetSystemTime(ref currentTime);
              // Set system date and time
              SystemTime updatedTime = new SystemTime();
              updatedTime.Year = (ushort)currentTime.Year;
              updatedTime.Month = (ushort)currentTime.Month;
              updatedTime.Day = (ushort)currentTime.Day;
              updatedTime.Hour = (ushort)currentTime.Hour;
              updatedTime.Minute = (ushort)currentTime.Minute;
              updatedTime.Second = (ushort)(currentTime.Second + Random.Next(1, 3));
              // Call the unmanaged function that sets the new date and time instantly
              Win32SetSystemTime(ref updatedTime);
          }
      }
  }
  </code></pre>