IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Считывание даных часовых поясов из реестра..., Даты перехода на зимнее/летнее время...
Snake_B
сообщение 29.04.2009 8:36
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Не могу разобраться как считать из реестра даные часовых поясов о датах перехода на летнее/зимнее время.
Хранятся тут:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\
Параметр TZI, в reg_binary... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 2.05.2009 11:17
Сообщение #2


Гость






Ну, смотри... Ты сам хотел читать из реестра (на форме - кнопка и TMemo):
procedure TForm1.Button1Click(Sender: TObject);

function title_wday(Dt: integer): string;
const
days: array[1 .. 7] of string = (
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
);
begin
case Dt of
1 .. 12: Result := days[Dt];
else Result := '#Err#';
end;
end;

function title_month(Dt: integer): string;
const
months: array[1 .. 12] of string = (
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
);
begin
case Dt of
1 .. 12: Result := months[Dt];
else Result := '#Err#';
end;
end;

function TZISysTimeToStr(tm: TSystemTime): string;
var
ADT: TDateTime;
sWhich: string;
begin
with tm do begin
if wMonth = 0 then Result := 'No time saved.'
else begin
ADT := EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
case wDay of
1: sWhich := '1st';
2: sWhich := '2nd';
3: sWhich := '3rd';
4: sWhich := '4th';
5: sWhich := 'last';
end;
Result := Format('%s, %s %s in %s',
[TimeToStr(ADT), sWhich, title_wday(wDayOfWeek + 1), title_month(wMonth)]);
end;
end;
end;

type
TRec = record
Bias, StdBias, DltBias: Integer;
StdDate, DltDate: TSystemTime;
end;

var
Keys: TStringList;
i: integer;
var
RTZ: TRec;
Description, DisplayData: string;
DT: TDateTime;
begin
with TRegistry.Create(KEY_READ) do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones',false) then
begin
Keys := TStringList.Create();
try
GetKeyNames(Keys);
CloseKey;
for i := 0 to Keys.Count -1 do
begin
if OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\'+Keys[i], False) then
begin
begin
Description := ReadString('Std');
DisplayData := ReadString('Display');
ReadBinaryData('TZI',rTZ,SizeOf(RTZ)) ;
Memo1.Lines.Add(
Description + ' ' +
DisplayData + ' ' +
' Bias: ' + IntToStr(RTZ.Bias) +
' SDate: ' + TZISysTimeToStr(RTZ.StdDate) +
' SBias: ' + IntToStr(RTZ.StdBias) +
' DDate: ' + TZISysTimeToStr(RTZ.DltDate) +
' DBias: ' + IntToStr(RTZ.DltBias)
);

end;
CloseKey;
end;

end;

finally
FreeAndNil(Keys);
end;
end;

finally
Free;
end;
end;

Выдает информацию вот в таком виде:
Прикрепленное изображение

(т.е, указывается не сама дата перехода, а ее описание: для Аляски - первое воскресенье ноября <-> второе воскресенье марта. Зная эти данные вычислить дату в текущем - да и вообще любом - году не должно быть большой проблемой)...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Snake_B   Считывание даных часовых поясов из реестра...   29.04.2009 8:36
Ozzя   Взято из ДРКБ Возможно, этот код сможет Вам помочь...   29.04.2009 10:07
Snake_B   Взято из ДРКБ Возможно, этот код сможет Вам помоч...   29.04.2009 18:28
volvo   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneInf...   29.04.2009 19:24
Snake_B   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneIn...   1.05.2009 22:43
Snake_B   Snake_B, зачем тебе реестр? Вызывай GetTimeZoneIn...   1.09.2010 23:29
volvo   И с какого такого времени в реестре хранится эта и...   1.05.2009 22:58
Snake_B   И с какого такого времени в реестре хранится эта ...   2.05.2009 9:34
volvo   Ну, смотри... Ты сам хотел читать из реестра (на ф...   2.05.2009 11:17
Snake_B   Ну, смотри... Ты сам хотел читать из реестра (на ...   2.05.2009 19:46
volvo   Как обычно, только тебе придется сначала еще и тип...   2.09.2010 1:43
Snake_B   Как обычно, только тебе придется сначала еще и ти...   2.09.2010 1:52
Lapp   а как этот параметр приравнять к NULL? А поставить...   2.09.2010 2:44
volvo   Андрей, все-таки, nil, а не NULL :) Snake_B Я ж г...   2.09.2010 9:27
Lapp   Андрей, все-таки, nil, а не NULL :)фу ты ну ты.....   2.09.2010 9:41
Snake_B   Андрей, все-таки, [b]nil, а не NULL :) ну, вот ...   2.09.2010 10:39
volvo   Ну, и я попробовал - компилятор это сожрал запрос...   2.09.2010 11:01
Snake_B   Ну, и я попробовал - компилятор это сожрал запрос...   2.09.2010 11:05
volvo   Внимание, вопрос: А что тебе возвращает GetTimeZon...   2.09.2010 12:58
Snake_B   Внимание, вопрос: А что тебе возвращает GetTimeZo...   2.09.2010 13:20
Snake_B   но всё, вопрос вроде закрыт... сделал через ...   3.09.2010 21:46
volvo   не сработает однозначно. Ибо прототип неправильный...   3.09.2010 22:20
Snake_B   не сработает однозначно. Ибо прототип неправильны...   3.09.2010 22:42
Snake_B   ну... у меня опять вопросик... вот собственно код:...   9.09.2010 2:54
Snake_B   ну... у меня опять вопросик... вот собственно код...   9.09.2010 20:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.06.2025 14:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"