HalpUtcTimeToAcpiRealTime

NTSTATUS __stdcall HalpUtcTimeToAcpiRealTime(LARGE_INTEGER *UtcTime, ACPI_REAL_TIME *AcpiRealTime){
  __int64 TimeZone; 
  struct _TIME_FIELDS TimeFields; 
  union _LARGE_INTEGER LocalTime; 
  LocalTime.QuadPart = 0i64;
  TimeFields = 0i64;
  AcpiRealTime->TimeZone = 2047;
  HalpQueryAcpiRealTimeClock(AcpiRealTime);
  TimeZone = AcpiRealTime->TimeZone;
  if( (unsigned __int64)(TimeZone + 1440) > 0xB40 )
  {
    if( ExRealTimeIsUniversal() )
    {
      AcpiRealTime->TimeZone = 0;
      AcpiRealTime->DayLight = 0;
      LocalTime = *UtcTime;
    }
    else
    {
      AcpiRealTime->TimeZone = SLOWORD(KUSER_SHARED_DATA.TimeZoneBias.LowPart) / 17920;
      ExSystemTimeToLocalTime(UtcTime, &LocalTime);
      if( KUSER_SHARED_DATA.TimeZoneId )
      {
        if( KUSER_SHARED_DATA.TimeZoneId == 1 )
        {
          AcpiRealTime->DayLight = 1;
        }
        else if( KUSER_SHARED_DATA.TimeZoneId == 2 )
        {
          AcpiRealTime->DayLight = 3;
        }
      }
      else
      {
        AcpiRealTime->DayLight = 0;
      }
    }
  }
  else
  {
    LocalTime.QuadPart = UtcTime->QuadPart - 600000000 * TimeZone;
  }
  RtlTimeToTimeFields(&LocalTime, &TimeFields);
  AcpiRealTime->Year = TimeFields.Year;
  AcpiRealTime->Month = TimeFields.Month;
  AcpiRealTime->Day = TimeFields.Day;
  AcpiRealTime->Hour = TimeFields.Hour;
  AcpiRealTime->Minute = TimeFields.Minute;
  AcpiRealTime->Second = TimeFields.Second;
  AcpiRealTime->Milliseconds = TimeFields.Milliseconds;
  return 0;
}

Referenced by:

HalSetRealTimeClock