Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ShIvADeSt Блин у меня тип time_t был обозначен как Int64 а нужно было Integer. Поэтому не работал и код. procedure DateTimeToSystemTime(const pdt: TDateTime; var pst: TSystemTime); var dt: TDateTime; ft: TFileTime; begin dt := (pdt + 109205.0) * 864000000000.0; ft := TFileTime(Round(dt)); FileTimeToSystemTime(ft, pst); end; function FormatTimeDate(t: time_t): AnsiString; const UnixDateDelta = 25569; MinPerDay = 24 * 60; SecPerDay = 24 * 60 * 60; var pdt : TDateTime; tzi : TTimeZoneInformation; pst : TSystemTime; bias : Integer; dwRet: DWORD; begin Result := ''; if (t <> 0) then begin pdt := UnixDateDelta + (t / SecPerDay); bias := 0; dwRet := GetTimeZoneInformation(tzi); if (dwRet <> TIME_ZONE_ID_INVALID) then begin if (dwRet = TIME_ZONE_ID_STANDARD) then bias := tzi.Bias + tzi.StandardBias else bias := tzi.Bias + tzi.DaylightBias; end; pdt := pdt - (bias / MinPerDay); DateTimeToSystemTime(pdt, pst); Result := Format('%2.2d.%2.2d.%4.4d %2.2d:%2.2d:%2.2d', [pst.wDay, pst.wMonth, pst.wYear, pst.wHour, pst.wMinute, pst.wSecond]); end; end; Кстати, я тут перебаламутил всех пару дней назад с WinInet функцией закачки файлов. Проблема решилась тем что я выставил указатель в начало через InternetSetFilePointer перед чтением. И сразу размер скачанных данных совпал со значением что сервер с заголовке отсылал. Вопрос к знающим. Мне нужно определить разницу в TSystemTime. Проблема что откуда то берутся 7 минут и 9 секунд. function AistTimeToSystemTime(pszTime: AnsiString): TSystemTime; begin ZeroMemory(@Result, SizeOf(TSystemTime)); Result.wYear := StrToInt(Copy(pszTime, 1, 4)); Result.wMonth := StrToInt(Copy(pszTime, 6, 2)); Result.wDay := StrToInt(Copy(pszTime, 9, 2)); Result.wHour := StrToInt(Copy(pszTime, 12, 2)); Result.wMinute := StrToInt(Copy(pszTime, 15, 2)); Result.wSecond := StrToInt(Copy(pszTime, 18, 2)); end; var pszText: AnsiString; time1 : TSystemTime; time2 : TSystemTime; date1 : TFileTime; date2 : TFileTime; df : TFileTime; st : TSystemTime; begin time1 := AistTimeToSystemTime('2011-01-01T16:35:00+04:00'); time2 := AistTimeToSystemTime('2011-01-15T16:35:00+04:00'); SystemTimeToFileTime(time1, date1); SystemTimeToFileTime(time2, date2); df.dwHighDateTime := date2.dwHighDateTime - date1.dwHighDateTime; df.dwLowDateTime := date2.dwLowDateTime - date1.dwLowDateTime; FileTimeToSystemTime(df, st); Dec(st.wYear, 1601); Dec(st.wMonth, 1); Dec(st.wDay, 1); pszText := Format('%d ч %d мин %d сек %d дн %d мес %d лет', [st.wHour, st.wMinute, st.wSecond, st.wDay, st.wMonth, st.wYear]); MessageBox(0, LPCSTR(pszText), nil, MB_OK); end. |