Вверх ↑
Этот топик читают: Гость
Ответов: 3851
Рейтинг: 159
#1: 2008-12-10 10:24:03 ЛС | профиль | цитата

можно ли узнать текущее время не в интернете, а с сервера провайдерской сети - может есть некая стандартная функция (сервис)?
Есть желание определять его из своей проги..
карма: 0
начавший
0
vip
#1.1контекстная реклама от партнеров
Ответов: 1305
Рейтинг: 29
#2: 2008-12-10 10:58:58 ЛС | профиль | цитата
Если знаешь его IP, то примерно так

#pas
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

PTIME_OF_DAY_INFO = ^TIME_OF_DAY_INFO;
TIME_OF_DAY_INFO = record
tod_elapsedt : DWORD;
tod_msecs : DWORD;
tod_hours : DWORD;
tod_mins : DWORD;
tod_secs : DWORD;
tod_hunds : DWORD;
tod_timezone : Longint;
tod_tinterval: DWORD;
tod_day : DWORD;
tod_month : DWORD;
tod_year : DWORD;
tod_weekday : DWORD;
end;

function NetRemoteTOD(Server: PWChar; var pBuffer: PTIME_OF_DAY_INFO): DWORD;
stdcall; external 'NETAPI32.DLL';
function NetApiBufferFree(pBuffer: Pointer): DWORD;
stdcall; external 'NETAPI32.DLL';

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
TOD: PTIME_OF_DAY_INFO;
begin
if NetRemoteTOD('\\192.168.2.108', TOD) = 0 then
try
with TOD^ do
ShowMessage(Format('Data %d %d %d Time %d:%d:%d',
[tod_day,
tod_month,
tod_year,
tod_hours - (tod_timezone div 60),
tod_mins,
tod_secs]));
finally
NetApiBufferFree(TOD);
end else
RaiseLastOSError;
end;

end.
PS: вместо IP подойдет и сетевое имя сервера

Однако в HiAsm'е я этого не пробовал
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#3: 2008-12-10 11:15:29 ЛС | профиль | цитата
около того
code_10919.txt

карма: 26
0
файлы: 1code_10919.txt [1.5KB] [398]
Ответов: 3851
Рейтинг: 159
#4: 2008-12-10 13:35:23 ЛС | профиль | цитата
Dilma, хотелось бы получить это время в виде текста (например) для дальнейшего использования в проге (не для автокоррекции локального), также адрес сервера как внешнее свойство..
карма: 0
начавший
0
Ответов: 1088
Рейтинг: 112
#5: 2008-12-10 13:50:34 ЛС | профиль | цитата
Не пашет ваш код - _debug не показывается.
а если убрать проверку if NetRemoteTOD('194.149.67.130', TOD) = 0 then
выдает причем значения не меняются.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1123.jpg [5.1KB] [367]
Разработчик
Ответов: 26066
Рейтинг: 2120
#6: 2008-12-10 14:37:14 ЛС | профиль | цитата
Sniper36 писал(а):
а если убрать проверку if NetRemoteTOD('194.149.67.130', TOD) = 0 then

А зачем ее убирать Воткни туда 127.0.0.1 и должен увидеть свое время. Вот только форматор коряво работает, вместо результата операции вычитания подставляет черте че.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#7: 2008-12-10 16:47:28 ЛС | профиль | цитата
Dilma, у меня код обрывается на

_debug(Format('Data %d %d %d Time %d:%d:%d',|35:  
11 человек закачали и все молчат , кроме Sniper36
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#8: 2008-12-10 17:00:52 ЛС | профиль | цитата
Tad писал(а):
11 человек закачали и все молчат

А у меня код работает, адрес IP поменять надо
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#9: 2008-12-10 17:12:49 ЛС | профиль | цитата
nesco,
nesco писал(а):
А у меня код работает,
а у меня код полностью не закачивается и при чем тут
nesco писал(а):
адрес IP поменять надо

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1305
Рейтинг: 29
#10: 2008-12-10 18:24:36 ЛС | профиль | цитата
Sniper36 писал(а):
если убрать проверку if NetRemoteTOD('194.149.67.130', TOD) = 0 then

Это не проверка - это собственно и есть получение времени удаленного компьютера. В случае удачи функция возвращает 0, данные о времени и дате заносятся в структуру TOD.
Tad писал(а):
у меня код обрывается на

А если так

Add(Button,7077563,112,105)
{
Left=110
Top=105
link(onClick,14185135:doWork,[])
}
Add(InlineCode,14185135,168,105)
{
WorkPoints=#6:doWork|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|49: procedure doWork(var Data:Tdata; index:word);|5: end;|40: PTIME_OF_DAY_INFO = ^TIME_OF_DAY_INFO;|27: TIME_OF_DAY_INFO = record|25: tod_elapsedt : DWORD;|25: tod_msecs : DWORD;|25: tod_hours : DWORD;|25: tod_mins : DWORD;|25: tod_secs : DWORD;|25: tod_hunds : DWORD;|27: tod_timezone : Longint;|25: tod_tinterval: DWORD;|25: tod_day : DWORD;|25: tod_month : DWORD;|25: tod_year : DWORD;|25: tod_weekday : DWORD;|6: end;|0:|79: function NetRemoteTOD(Server: PWChar; var pBuffer: PTIME_OF_DAY_INFO): DWORD;|38: stdcall; external 'NETAPI32.DLL';|53: function NetApiBufferFree(pBuffer: Pointer): DWORD;|38: stdcall; external 'NETAPI32.DLL';|0:|14:implementation|0:|29:procedure THiAsmClass.doWork;|3:var|25: TOD: PTIME_OF_DAY_INFO;|5:begin|48: if NetRemoteTOD('192.43.244.18', TOD) = 0 then|8: begin|18: with TOD^ do|52: _debug(Format('Data %d %d %d Time %d:%d:%d',|35: [tod_day,|36: tod_month,|35: tod_year,|60: tod_hours - (tod_timezone div 60),|35: tod_mins,|38: tod_secs]));|28: NetApiBufferFree(TOD);|7: end;|4:end;|0:|4:end.|
}

карма: 0

0
Ответов: 16884
Рейтинг: 1239
#11: 2008-12-10 19:04:32 ЛС | профиль | цитата
v258, так считалось нормально - до конца.
А вот файлы в формате code_XXXXX.txt читаются часто неполностью.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15294
Рейтинг: 1518
#12: 2008-12-10 21:36:33 ЛС | профиль | цитата
судя по описанию на форумах эта функция получает время только с машин из собственной сети причем работающих на платформе NT

------------ Дoбавленo:


вообще для простейшего получения времени(без поправки на часовой пояс) достаточно такой схемы

Add(TCP_Client,96010,427,126)
{
Port=13
IP="192.43.244.18"
link(onRead,14313:doAdd,[])
}
Add(ListBox,14313,476,126)
{
Left=65
Top=15
Width=315
Height=70
Font=[Arial,8,0,0,1]
}
Add(Button,67336,378,126)
{
Left=5
Top=15
Font=[Arial,8,0,0,1]
Caption="open"
link(onClick,96010:doOpen,[])
}

карма: 26
1
Голосовали:Andrey
Ответов: 3851
Рейтинг: 159
#13: 2008-12-10 22:33:41 ЛС | профиль | цитата
Dilma, спасибо - то что надо.

Осталось найти недавнюю тему с ключиком реестра про летнее время (вроде видел, если не померещилось)
карма: 0
начавший
0
Гость
Ответов: 17029
Рейтинг: 0
#14: 2013-03-12 19:34:54 правка | ЛС | профиль | цитата


Редактировалось 6 раз(а), последний 2021-06-24 08:05:28
карма: 0

0
Ответов: 1263
Рейтинг: 47
#15: 2013-03-13 00:23:41 ЛС | профиль | цитата
Это был я.
------------ Дoбавленo в 00.23:
Вот сделал схему с динамическим обновлением списка серверов времени с официального сайта. Все работает автоматически, после первого найденного доступного сервера перебор останавливается.

Add(MainForm,2953706,21,105)
{
Width=429
Height=484
link(onCreate,11063823:doEvent1,[(93,125)(93,433)])
}
Add(Button,7077563,56,434)
{
Left=5
Top=405
link(onClick,11063823:doEvent2,[])
}
Add(Hub,12843293,413,476)
{
link(onEvent1,3728331:doData,[(469,482)(469,531)])
link(onEvent2,13258130:doTimer,[(439,489)(439,510)(401,510)(401,531)])
}
Add(TCP_Client,96010,224,273)
{
Port=37
IP="64.90.182.55"
Point(onError)
Point(onProgress)
link(onRead,1759785:doEvent1,[(268,279)(268,251)])
link(onConnect,2560363:doChangeValue,[(310,286)(310,209)])
link(onDisconnect,8497380:doChangeValue,[(310,293)(310,244)])
link(IP,2614948:Text,[(230,251)(167,251)])
link(Port,13213040:Text,[(244,251)(223,251)])
link(onError,2299999:doText,[(272,300)(272,321)])
}
Add(ListBox,14313,350,245)
{
Left=70
Top=85
Width=315
Height=70
Font=[Arial,8,0,0,1]
}
Add(Button,67336,49,273)
{
Left=10
Top=85
Font=[Arial,8,0,0,1]
Caption="open"
link(onClick,2979057:doEvent2,[(110,279)(110,286)])
}
Add(Edit,2614948,161,196)
{
Left=15
Top=20
Width=155
Text="=IP="
}
Add(Edit,13213040,217,196)
{
Left=205
Top=20
Text="13"
}
Add(LED,8497380,434,238)
{
Left=315
Top=190
}
Add(LED,2560363,434,203)
{
Left=260
Top=190
ColorOn=65280
ColorOff=32768
}
Add(Label,2299999,287,315)
{
Left=230
Top=235
}
Add(Button,9402568,49,315)
{
Left=10
Top=125
Caption="close"
link(onClick,96010:doClose,[(153,321)(153,286)])
}
Add(HTTP_Get,1515275,238,427)
{
URL="http://tf.nist.gov/tf-cgi/servers.cgi"
link(onDownload,1501220:doConvert,[])
}
Add(InfoTip,3854809,371,567)
{
Info=#71:Чаще 1 запроса в 4 секунды нельзя обращаться - заблокируют как ДДОСера.|
Width=113
Height=109
}
Add(Convertor,1501220,308,434)
{
Mode=11
link(onResult,13379094:doSearch,[])
}
Add(BlockFind,13379094,364,434)
{
IncludeBlock=1
StartBlock="<td align = "center">"
EndBlock="</td>"
link(onSearch,4704333:doSel,[(429,440)(429,426)])
link(onEndSearch,12843293:doEvent1,[(404,447)(404,482)])
}
Add(Memo,10666517,602,427)
{
@Hint=#12:64.90.182.55|12:96.47.67.105|15:165.193.126.229|15:165.193.126.232|15:206.246.122.250|11:129.6.15.28|11:129.6.15.29|11:129.6.15.30|12:64.236.96.53|14:98.175.203.200|14:64.250.177.145|14:207.223.123.18|14:216.171.120.36|14:96.226.123.157|13:50.77.217.185|11:64.113.32.5|14:66.219.116.140|13:216.229.0.179|13:24.56.178.140|13:132.163.4.101|13:132.163.4.102|13:132.163.4.103|14:128.138.140.44|15:128.138.141.172|11:198.60.73.8|14:64.250.229.100|14:131.107.13.100|14:216.228.192.69|14:207.200.81.113|11:69.25.96.13|14:216.171.124.36|14:64.147.116.229|
Left=90
Top=270
Width=295
Height=160
ScrollBars=2
}
Add(DoData,3728331,511,525)
{
link(onEventData,13810955:doMax,[(551,531)(551,524)])
link(Data,10666517:Count,[(517,502)(615,502)])
}
Add(InlineCode,4704333,462,420)
{
@Hint=#34:Фильтрация цифр, букв, знаков и IP|0:|46:http://forum.hiasm.com/forum.html?q=3&p=174194|0:|
WorkPoints=#5:doSel|
EventPoints=#4:SelD|4:SelA|4:SelR|4:SelZ|5:SelIP|
DataPoints=#3:Str|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: SelD:THI_Event;|18: SelA:THI_Event;|18: SelR:THI_Event;|18: SelZ:THI_Event;|19: SelIP:THI_Event;|17: Str:THI_Event;|48: Procedure doSel(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:Procedure THiAsmClass.doSel;|16:var s,ip:string;|18: i,clr:integer;|5:begin|9:clr := 0;|77: s:=ReadString(_Data,Str,''); //читаем строку из потока или верхней точки|80: If s='' then exit; // если строка пустая, то выходим из процедуры|57: For i:=1 to Length(s) do // берём по одной букве|8: begin|54: If s[i] in['0'..'9'] then // проверка на цифры|12: begin |31: _hi_onEvent(SelD,s[i]); |46: If s[1] in['0'..'9'] then ip:= ip+s[i];|17: Continue; |9: end|70: else if s[i] in['A'..'Z','a'..'z'] then // проверка на английский|12: begin |30: _hi_onEvent(SelA,s[i]);|15: clr:=1; |17: Continue; |9: end|67: else if s[i] in['А'..'Я','а'..'я'] then // проверка на русский|12: begin |31: _hi_onEvent(SelR,s[i]); |29: clr:=1; |17: Continue; |9: end|15: else begin |40: _hi_onEvent(SelZ,s[i]); // знаки|60: If s[1] in['0'..'9'] then if s[i]='.' then ip:= ip+s[i];|29: If s[i]=':' then clr:=1; |9: end;|7: end;|0:|42: If clr = 0 then _hi_onEvent(SelIP,ip); |28: //_hi_onEvent(SelIP,clr);|3: |4:end;|4:end.|
link(SelIP,10666517:doAdd,[(548,454)(548,433)])
}
Add(Hub,11063823,133,427)
{
InCount=2
link(onEvent1,1515275:doDownload,[])
}
Add(Hub,12723812,98,252)
{
link(onEvent1,2614948:doText,[(147,258)(147,202)])
link(onEvent2,2979057:doEvent1,[(122,265)(122,279)])
}
Add(Hub,2979057,133,273)
{
InCount=2
link(onEvent1,96010:doOpen,[])
}
Add(Hub,1759785,287,245)
{
link(onEvent1,14313:doAdd,[])
link(onEvent2,13258130:doStop,[(357,258)(357,538)])
}
Add(Timer,13258130,413,525)
{
Interval=5000
Enable=1
link(onTimer,13810955:doNext,[(503,531)(503,510)])
}
Add(ArrayRW,11105775,616,504)
{
link(onRead,12723812:doEvent1,[(660,510)(660,391)(86,391)(86,258)])
link(Array,10666517:Array,[])
}
Add(CounterEx,13810955,560,504)
{
Default=-1
Point(doReset)
Point(onThroughMax)
Point(doMax)
link(onNext,11105775:doRead,[])
}



карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)