Page 1 of 3

Internet Date

Posted: Thu Nov 22, 2012 11:55 pm
by Jeff Barnes
Hi,

Is there a way to get the current date via FWH from the internet?

Re: Internet Date

Posted: Fri Nov 23, 2012 7:54 am
by StefanHaupt
Jeff,

here is what you need. (not tested yet)

tsntp.rar

Re: Internet Date

Posted: Sun Nov 25, 2012 11:43 pm
by Jeff Barnes
Thanks Stefan but I get this error:

Module: 'tsntp.prg' was compiled into PCODE version 7, this version of xHarbour expects version: 10

Re: Internet Date

Posted: Mon Nov 26, 2012 8:28 am
by StefanHaupt
Hmm, it´s an older lib, I have no sources, sorry.

Re: Internet Date

Posted: Mon Nov 26, 2012 8:29 am
by StefanHaupt
I found parts of the source here
http://www4.zzz.com.tw/phpbb2/viewtopic.php?t=29

But the function GetSntp() is missing, maybe you can contact the author

Re: Internet Date

Posted: Mon Nov 26, 2012 7:23 pm
by Jeff Barnes
Thanks Stefan,

I was able to get it working by linking the .lib file then adding an INCLUDE "TSNTP.PRG"

Code: Select all

Func    Test()
Local   aNet      := {},;
        nPort     := 123,;
        cIp       := "time.windows.com",;
        lSync     := .T.,;
        oSntp     := NIL;
        cNetDate
        oSntp := TSntp():New( cIP, nPort, lSync )

        If oSntp:GetData()
           // orignal code:   ? oSntp:Date(), "date"
           cNetDate := oSntp:Date()
        Else
           cNetDate := "99/99/99"
        EndIf

Return  cNetDate 
 

Code: Select all

// TSNTP.PRG
// Copyright by WenSheng come from TAIWAN
#include "hbclass.ch"
#include "common.ch"
CLASS   TSNTP

        DATA    cServer,;       // server name/ip
                nPort,;         // server port
                lSync,;         // Sync flag
                lError

        DATA    nYear,;
                nMonth,;
                nDay,;
                nWeek,;
                nDayOfYear

        DATA    nHours,;
                nMinute,;
                nSeconds

        METHOD  New(cServer, nPort, lSync)
        METHOD  GetData()
        MESSAGE DATE    METHOD  _Date()
        MESSAGE TIME    METHOD  _Time()

ENDCLASS

//
METHOD  New( cServer, nPort, lSync )    CLASS   TSNTP
DEFAULT cServer to "time.windows.com"   // 主機名稱
DEFAULT nPort   to 123                  // 主機 port
DEFAULT lSync   to .F.                  // 時間同步

        ::cServer   := cServer
        ::nPort     := nPort
        ::lSync     := lSync
        ::lError    := .F.

RETURN  Self

//
METHOD  GetData()   CLASS   TSNTP
Local   xRet    := GetSNTP( ::cServer, ::nPort, ::lSync )
        If ValType(xRet) == "N"
           ::lError   := .T.
           ::nYear    := 0
           ::nMonth   := 0
           ::nDay     := 0
           ::nHours   := 0
           ::nMinute  := 0
           ::nSeconds := 0
           ::nWeek    := 0
           ::nDayOfYear := 0
        Else
           ::lError := .F.
           //          0        1         2
           //          12345678901234567890
           // 取得資料 yyyymmddhhmmsswyda
           ::nYear    := Val( Substr( xRet,  1, 4 ))
           ::nMonth   := Val( Substr( xRet,  5, 2 ))
           ::nDay     := Val( Substr( xRet,  7, 2 ))
           ::nHours   := Val( Substr( xRet,  9, 2 ))
           ::nMinute  := Val( Substr( xRet, 11, 2 ))
           ::nSeconds := Val( Substr( xRet, 13, 2 ))
           ::nWeek    := Val( Substr( xRet, 15, 1 ))
           ::nDayOfYear := Val( Substr( xRet, 16, 3 ))
        EndIf

RETURN  ! ::lError

//
METHOD  _Date()     CLASS   TSNTP
RETURN  StoD( PadL( ::nYear, 4, "0" )+;
              PadL( ::nMonth, 2, "0" )+;
              PadL( ::nDay, 2, "0" ))

//
METHOD  _Time()     CLASS   TSNTP
RETURN  PadL( ::nHours, 2, "0" )+":"+;
        PadL( ::nMinute, 2, "0" )+":"+;
        PadL( ::nSeconds, 2, "0" )

 

Re: Internet Date

Posted: Tue Nov 27, 2012 3:06 pm
by Biel EA6DD
An alternative using JSON, http://json-time.appspot.com/

Code: Select all

FUNCTION testTime()
   LOCAL oHttp, hTime,cTime
   oHttp:=CreateObject( "winhttp.winHttpRequest.5.1" )
   oHttp:Open("GET","http://json-time.appspot.com/time.json",.F.)
   oHttp:Send()
   oHttp:waitForResponse()
   IF oHttp:Status == 200
      hb_jsondecode(oHttp:ResponseText(),@hTime) //Parse JSON to hash
      cTime:=Str(hTime["hour"],2)+":"+Str(hTime["minute"],2)+":"+Str(hTime["second"],2)
      //--- just for test output data
      xBrowse(hTime) //All data in hash,
      MsgInfo(cTime+" GMT") //Time GMT
      MsgInfo(hTime["datetime"]) //Date time
      //--
   ENDIF
RETURN cTime
 

Re: Internet Date

Posted: Tue Nov 27, 2012 11:51 pm
by albeiroval
Hi jeff,

where I get "tsntp.rar" or hb_fun_getsntp(...) function

thanks,

Albeiro,

Re: Internet Date

Posted: Wed Nov 28, 2012 12:09 am
by Jeff Barnes
Hi Alberio,

Stefan provided a link to tsntp.rar above but here it is again:


http://www.file-upload.net/download-684 ... p.rar.html

Re: Internet Date

Posted: Wed Nov 28, 2012 12:37 am
by albeiroval
jeff,

I sent the link to babylon search, I do not want to install it, could you send me the zip file "tsntp.rar" to my mail "albeiroval@gmail.com" ..

thanks,

regards,

Albeiro,

Re: Internet Date

Posted: Wed Nov 28, 2012 12:56 am
by Jeff Barnes
Hi Albeiro

Check your email :)

Re: Internet Date

Posted: Sat Aug 10, 2013 11:09 pm
by Ugo
Hi all,

after download of sntp.lib and test it, i found that after, about 32 call date-time test, the result is only FAIL!

I have some question:

- There is a limit of use this lib? (max number calling in a exe session?)
- How to remove it?
- Is possible to obtain more time precision from internet sntp?
- Exist GetSntp source code, how find it?

Thank you for your reply.

Re: Internet Date

Posted: Sat Aug 10, 2013 11:52 pm
by ADutheil
I use this function to check date

Code: Select all

FUNCTION Vencido
LOCAL nTime := fCreate( "chkdtime.bat" )
LOCAL cBuff := ""
LOCAL lRetu := .F.
LOCAL cDbar := "/" // 
LOCAL aEOL := { Chr(13) + Chr(10), Chr(13), Chr(10) }
 
fWrite( nTime, "w32tm /stripchart /samples:1 /dataonly /computer:time.window.com >chkdtime.txt" )
fClose( nTime )
ShellExecute( 0, "open", "chkdtime.bat",,, )
WaitSeconds( 2 )
IF ( nTime := fOpen( "chkdtime.txt" ) ) > 0
    WHILE hb_fReadLine( nTime, @cBuff, aEOL  ) = 0
        IF cDbar $ cBuff
            cBuff := subStr( cBuff, at( cDbar, cBuff ) - 2 )
            IF cToD( subStr( cBuff, 1, at( " ", cBuff ) - 1 ) ) > cToD( "01/01/14" )
                msgStop( "O PERÍODO DE AVALIAÇÃO TERMINOU" + CRLF + "SOLICITE UMA VERSÃO ATUALIZADA AO DESENVOLVEDOR", "Atenção" )
                lRetu := .T.
            ENDIF
            EXIT
        ENDIF
    ENDDO
    fClose( nTime )
ENDIF
fErase( "chkdtime.bat" )
fErase( "chkdtime.txt" )
RETURN ( lRetu )

Re: Internet Date

Posted: Sun Aug 11, 2013 10:24 am
by Ugo
Hi Andrè
ADutheil wrote:I use this function to check date ...
Thank you, but my necessity is to have in return the exact TIME more exactly possible.

From my search, the ntp protocol can return exactly also 1/1000 sec!

The function "getsntp" is a good solution, is quick and use the standard protocol ntp.

The question is: where find it?

Can you help me?

Thank in advance.

Re: Internet Date

Posted: Sun Aug 11, 2013 2:23 pm
by James Bott
Ugo,

There are two links to the source code further up in this message thread.

James