Boolean OperatingSystem::getLocalDateTime(CIMDateTime& localDateTime)
{
    SYSTEMTIME time;
    Sint16 currentTimeZone;

    ::memset(&time, 0, sizeof(time));

    ::GetLocalTime(&time);

    std::stringstream ss;

    ss << std::setfill('0');
    ss << std::setw(4) << time.wYear;
    ss << std::setw(2) << time.wMonth;
    ss << std::setw(2) << time.wDay;
    ss << std::setw(2) << time.wHour;
    ss << std::setw(2) << time.wMinute;
    ss << std::setw(2) << time.wSecond;
    ss << ".";
    ss << std::setw(6) << time.wMilliseconds * 1000;
    if (getCurrentTimeZone(currentTimeZone))
    {
        ss << (currentTimeZone < 0 ? "-" : "+");
    }
    ss << std::setw(3) << ::abs(currentTimeZone);

    localDateTime = CIMDateTime (String (ss.str().c_str()));

    return true;
}
//
// Note: Original code was taken from OperatingSystem::getLocalDateTime ()
//
CIMDateTime CIMDateTime::getCurrentDateTime()
{
   SYSTEMTIME time;
   Sint16 currentTimeZone;

   ::memset(&time, 0, sizeof(time));

   // Get the local time
   ::GetLocalTime(&time);

   std::stringstream ss;

   ss << std::setfill('0');
   ss << std::setw(4) << time.wYear;
   ss << std::setw(2) << time.wMonth;
   ss << std::setw(2) << time.wDay;
   ss << std::setw(2) << time.wHour;
   ss << std::setw(2) << time.wMinute;
   ss << std::setw(2) << time.wSecond;
   ss << ".";
   ss << std::setw(6) << time.wMilliseconds * 1000;
   if (getCurrentTimeZone(currentTimeZone))
   {
      ss << (currentTimeZone < 0 ? "-" : "+");
   }
   ss << std::setw(3) << ::abs(currentTimeZone);

   CIMDateTime currentDateTime = ss.str().c_str();

   return currentDateTime;
}