Get Time from Remote NT Server


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:00am

    Originally 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:00am

    Originally 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.

    Reply
  • Other Code to Work with Win9X

    Posted by Legacy on 06/02/2003 12:00am

    Originally posted by: Leo A. Novelli

    Here is the code I use to work on Windows 9x machines.  It basically runs the net time command and waits for it to finish.
    
    

    Note, change the server name "delphis" to the name of your local server.

    Private Declare Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function GetExitCodeProcess Lib "Kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
    Const STILL_ACTIVE = &H103
    Const PROCESS_QUERY_INFORMATION = &H400

    Private Sub Shell32Bit(ByVal JobToDo As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbHide))
    Do
    GetExitCodeProcess hProcess, RetVal
    DoEvents: Sleep 100
    Loop While RetVal = STILL_ACTIVE
    End Sub

    Private Sub Command1_Click()
    Shell32Bit "command.com /c net time \\delphis /set /y"
    MsgBox "Complete"
    End Sub

    Reply
  • Get Time from Remote NT Server

    Posted by Legacy on 02/22/2003 12:00am

    Originally posted by: solomon A

    Its nice? and very helpful

    Reply
  • nothing

    Posted by Legacy on 10/08/2002 12:00am

    Originally posted by: Julio

    Can you explain me if can I run it in win 98/95 ?
    thank you.

    Reply
  • A rare code

    Posted by Legacy on 09/04/2002 12:00am

    Originally 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.

    Reply
  • Excellent

    Posted by Legacy on 04/20/2002 12:00am

    Originally posted by: Arun

    Could not get Server Time from Client Machines working on 95/98, If Yes How is it Possible.

    Reply
  • Excellent

    Posted by Legacy on 03/07/2002 12:00am

    Originally posted by: Paul DeGagne'

    Your code worked perfectly.

    Thanks a lot

    Paul

    Reply
  • useful code but Time Zone info is not correctly added

    Posted by Legacy on 10/17/2001 12:00am

    Originally posted by: sachin joshi

    This Code Doesnot take care of time zone if the time zone changes a day.
    

    result = DateSerial(tod.tod_year, tod.tod_month, tod.tod_day) + _
    TimeSerial(tod.tod_hours, tod.tod_mins - tod.tod_timezone, tod.tod_secs)

    so get the time zone differnce

    call timeserial w/o timezonediffernce

    result = DateSerial(tod.tod_year, tod.tod_month, tod.tod_day) + _
    TimeSerial(tod.tod_hours, tod.tod_mins , tod.tod_secs)

    and then add
    DateAdd("n", tod.tod_timezone, result )

    Reply
  • Run-time Error 453

    Posted by Legacy on 07/03/2001 12:00am

    Originally posted by: Anderson

    Cant find DLL entry point NetRemoteTOD in NETAPI32.DLL

    What is this ??
    Wah i do ?

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Java developers know that testing code changes can be a huge pain, and waiting for an application to redeploy after a code fix can take an eternity. Wouldn't it be great if you could see your code changes immediately, fine-tune, debug, explore and deploy code without waiting for ages? In this white paper, find out how that's possible with a Java plugin that drastically changes the way you develop, test and run Java applications. Discover the advantages of this plugin, and the changes you can expect to see …

  • As a result of corporate expansions, mergers, and acquisitions, the teams and technologies that support an organization's IT service management (ITSM) practices can over time become somewhat dispersed. Supporting an organization's strategic objectives, and providing consistent and quality IT support is essential, but this can be challenging where disconnected support environments exist. While physically centralizing support is not always possible, nor is it always desirable, delivering a consistent and …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds