uint64 TSysTm::GetMSecsFromTm(const TTm& Tm){ SYSTEMTIME SysTm; FILETIME FileTm; SysTm.wYear=WORD(Tm.GetYear()); SysTm.wMonth=WORD(Tm.GetMonth()); SysTm.wDayOfWeek=WORD(Tm.GetDayOfWeek()); SysTm.wDay=WORD(Tm.GetDay()); SysTm.wHour=WORD(Tm.GetHour()); SysTm.wMinute=WORD(Tm.GetMin()); SysTm.wSecond=WORD(Tm.GetSec()); SysTm.wMilliseconds=WORD(Tm.GetMSec()); ESAssert(SystemTimeToFileTime(&SysTm, &FileTm)); TUInt64 UInt64(uint(FileTm.dwHighDateTime), uint(FileTm.dwLowDateTime)); return UInt64.Val/uint64(10000); }
TTm TSysTm::GetLocTmFromUniTm(const TTm& Tm){ // get time-zone information TIME_ZONE_INFORMATION TzInf; GetTimeZoneInformation(&TzInf); // get system time SYSTEMTIME UniSysTm; UniSysTm.wYear=WORD(Tm.GetYear()); UniSysTm.wMonth=WORD(Tm.GetMonth()); UniSysTm.wDayOfWeek=WORD(Tm.GetDayOfWeek()); UniSysTm.wDay=WORD(Tm.GetDay()); UniSysTm.wHour=WORD(Tm.GetHour()); UniSysTm.wMinute=WORD(Tm.GetMin()); UniSysTm.wSecond=WORD(Tm.GetSec()); UniSysTm.wMilliseconds=WORD(Tm.GetMSec()); // convert system-time SYSTEMTIME LocSysTm; SystemTimeToTzSpecificLocalTime(&TzInf, &UniSysTm, &LocSysTm); // return local-time return TTm(LocSysTm.wYear, LocSysTm.wMonth, LocSysTm.wDay, LocSysTm.wDayOfWeek, LocSysTm.wHour, LocSysTm.wMinute, LocSysTm.wSecond, LocSysTm.wMilliseconds); }
TTm TSysTm::GetUniTmFromLocTm(const TTm& Tm){ // get time-zone information TIME_ZONE_INFORMATION TzInf; GetTimeZoneInformation(&TzInf); // get system time SYSTEMTIME LocSysTm; LocSysTm.wYear=WORD(Tm.GetYear()); LocSysTm.wMonth=WORD(Tm.GetMonth()); LocSysTm.wDayOfWeek=WORD(Tm.GetDayOfWeek()); LocSysTm.wDay=WORD(Tm.GetDay()); LocSysTm.wHour=WORD(Tm.GetHour()); LocSysTm.wMinute=WORD(Tm.GetMin()); LocSysTm.wSecond=WORD(Tm.GetSec()); LocSysTm.wMilliseconds=WORD(Tm.GetMSec()); // convert system-time SYSTEMTIME UniSysTm=LocSysTm; Fail; // BCB5.0 doesn't find TzSpecificLocalTimeToSystemTime //TzSpecificLocalTimeToSystemTime(&TzInf, &LocSysTm, &UniSysTm); // return system-time return TTm(UniSysTm.wYear, UniSysTm.wMonth, UniSysTm.wDay, UniSysTm.wDayOfWeek, UniSysTm.wHour, UniSysTm.wMinute, UniSysTm.wSecond, UniSysTm.wMilliseconds); }