Get Time from Remote NT Server
Posted
by Lothar Haensler
on January 30th, 2004
Author: Lothar Haensler
This small piece of code returns a VB Date and will raise an error if the
NetRemoteTOD- API call fails. It takes care of all time-zone information - place the following code into a standard BAS module :
option Explicit
'
'
private Declare Function NetRemoteTOD Lib "Netapi32.dll" ( _
tServer as Any, pBuffer as Long) as Long
'
private Type SYSTEMTIME
wYear as Integer
wMonth as Integer
wDayOfWeek as Integer
wDay as Integer
wHour as Integer
wMinute as Integer
wSecond as Integer
wMilliseconds as Integer
End Type
'
private Type TIME_ZONE_INFORMATION
Bias as Long
StandardName(32) as Integer
StandardDate as SYSTEMTIME
StandardBias as Long
DaylightName(32) as Integer
DaylightDate as SYSTEMTIME
DaylightBias as Long
End Type
'
private Declare Function GetTimeZoneInformation Lib "kernel32" _
(lpTimeZoneInformation as TIME_ZONE_INFORMATION) as Long
'
private Declare Function NetApiBufferFree Lib "Netapi32.dll" _
(byval lpBuffer as Long) as Long
'
private Type TIME_OF_DAY_INFO
tod_elapsedt as Long
tod_msecs as Long
tod_hours as Long
tod_mins as Long
tod_secs as Long
tod_hunds as Long
tod_timezone as Long
tod_tinterval as Long
tod_day as Long
tod_month as Long
tod_year as Long
tod_weekday as Long
End Type
'
private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination as Any, Source as Any, byval Length as Long)
'
'
public Function getRemoteTOD(byval strServer as string) as date
'
Dim result as date
Dim lRet as Long
Dim tod as TIME_OF_DAY_INFO
Dim lpbuff as Long
Dim tServer() as Byte
'
tServer = strServer & vbNullChar
lRet = NetRemoteTOD(tServer(0), lpbuff)
'
If lRet = 0 then
CopyMemory tod, byval lpbuff, len(tod)
NetApiBufferFree lpbuff
result = DateSerial(tod.tod_year, tod.tod_month, _
tod.tod_day) + _
TimeSerial(tod.tod_hours, tod.tod_mins - tod.tod_timezone, _
tod.tod_secs)
getRemoteTOD = result
else
Err.Raise Number:=vbObjectError + 1001, _
Description:="cannot get remote TOD"
End If
'
End Function
- to use in your program, call it like this :
private Sub Command1_Click()
Dim d as date
'
d = GetRemoteTOD("your NT server name goes here")
MsgBox d
End Sub
'
'
'
Download BAS module

Comments
Is there a way to do this using the IP address rather than server name?
Posted by Legacy on 11/07/2003 12:00amOriginally posted by: Steve
Is there a way to do this using the IP address rather than server name?
Reply
Get server datetime
Posted by Legacy on 07/22/2003 12:00amOriginally posted by: Janet
Regarding to the code posted by Lothar Haensler, it only works when I am the administrator of that server. I would like to know if it is possible to get the server date time even I am not the server admin.?
Thanks & Regards.
ReplyOther Code to Work with Win9X
Posted by Legacy on 06/02/2003 12:00amOriginally posted by: Leo A. Novelli
ReplyGet Time from Remote NT Server
Posted by Legacy on 02/22/2003 12:00amOriginally posted by: solomon A
Its nice? and very helpful
Replynothing
Posted by Legacy on 10/08/2002 12:00amOriginally posted by: Julio
Can you explain me if can I run it in win 98/95 ?
Replythank you.
A rare code
Posted by Legacy on 09/04/2002 12:00amOriginally posted by: Nirav Darji
The code here mentioned is really a good one. If one has to deal with only NT systems then this code is helpful.
ReplyExcellent
Posted by Legacy on 04/20/2002 12:00amOriginally posted by: Arun
Could not get Server Time from Client Machines working on 95/98, If Yes How is it Possible.
ReplyExcellent
Posted by Legacy on 03/07/2002 12:00amOriginally posted by: Paul DeGagne'
Your code worked perfectly.
Thanks a lot
Paul
Replyuseful code but Time Zone info is not correctly added
Posted by Legacy on 10/17/2001 12:00amOriginally posted by: sachin joshi
ReplyRun-time Error 453
Posted by Legacy on 07/03/2001 12:00amOriginally posted by: Anderson
Cant find DLL entry point NetRemoteTOD in NETAPI32.DLL
What is this ??
ReplyWah i do ?
Loading, Please Wait ...