Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SystemTime [D6]


Александр_К ©   (2007-08-13 08:33:00) 

Уважаемые мастера.
Почему при переводе SystemTime в час получается не тот час, который стоит в системе, хотя остальные параметры определяются верно.

function GetTime:string;
var
   k1,k2,k3:string;
   SystemTime:TSystemTime;
begin
   Windows.GetSystemTime(SystemTime);
   if SystemTime.wMinute < 10 then
       k2:='0'+IntToStr(SystemTime.wMinute)
   else
       k2:=IntToStr(SystemTime.wMinute);
   if SystemTime.wHour < 10 then
       k1:='0'+IntToStr(SystemTime.wHour)
   else
       k1:=IntToStr(SystemTime.wHour);
   if SystemTime.wSecond < 10 then
       k3:='0'+IntToStr(SystemTime.wSecond)
   else
       k3:=IntToStr(SystemTime.wSecond);
   Result:='['+k1+':'+k2+':'+k3+']';
end;


antonn   (2007-08-13 23:10:00) [1]

хм.. а formatdatetime() в каком модуле находится?


patrushevd1982   (2007-08-13 23:08:00) [2]

ЕПРСТ!.... Посмотри, как выглядит timetostr и сделай нечто подобное!!!


Debug   (2007-08-13 17:56:00) [3]


> или в лог записать в
> текстовом виде.

абсолютно точно


DVM   (2007-08-13 10:44:00) [4]


> нафига?

Ну может ему время где вывести надо или в лог записать в текстовом виде.


DVM   (2007-08-13 10:43:00) [5]


function GetTime: string;
var
 st: TSystemTime;
 Time, FormatString: PChar;
 TimeSize, FormatStringSize: integer;
begin
 Result := '';
 FormatStringSize := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, nil, 0);
 GetMem(FormatString, FormatStringSize * SizeOf(Char));
 GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, FormatString, FormatStringSize);
 GetLocalTime(st);
 TimeSize := GetTimeFormat(LOCALE_USER_DEFAULT, 0, nil, FormatString, nil, 0);
 GetMem(Time, TimeSize * SizeOf(Char));
 GetTimeFormat(LOCALE_USER_DEFAULT, 0, @st, FormatString, Time, TimeSize * SizeOf(Char));
 result := Time;
 FreeMem(Time);
 FreeMem(FormatString);
end;


DVM   (2007-08-13 10:42:00) [6]


> Я не хочу подключать SysUtils, так как программа пишется
> на WinAPI.

Тогда и действуй по правилам WinAPI. Функции для форматирования там тоже есть и причем с учетом настроек локали.

GetLocalTime()
GetTimeFormat()
GetLocaleInfo()


sniknik   (2007-08-13 10:42:00) [7]

> Я делаю так:
нафига? что вообще за дурацкая привычка работать не с датой, а с ее строковым представлением?


Debug   (2007-08-13 09:22:00) [8]

GetSystemTime - время по Гринвичу.
Я делаю так:

var Time : SystemTime;
...
GetLocalTime(Time);
Result := Format('%.2d/%.2d/%.4d %.2d:%.2d:%.2d', [Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond]);


sniknik   (2007-08-13 08:57:00) [9]

> Я не хочу подключать SysUtils, так как программа пишется на WinAPI.
сам себе злобный буратино...
ну ладно не хочеш подключать..., но посмотреть как сделано в нем, по нормальному, тоже не хочеш? и узнать как время в системе, виндах, устроено тоже? а без этого писать на WinAPI смысла мало.


Александр_К   (2007-08-13 08:42:00) [10]

Я не хочу подключать SysUtils, так как программа пишется на WinAPI.


Anatoly Podgoretsky   (2007-08-13 08:38:00) [11]

> Александр_К  (13.08.2007 08:33:00)  [0]

Что значит не тот час, неправильный или не тот который ты ожидаешь.
Как устроено время в мире знаком?
Вообще то это глупый метод формирования текстовой строки из времени, может стоит ознакомиться с функциями времени в Дельфи?


Наверх

Титульная страница Поиск, карта сайта Написать письмо