Internet Date
Posted: Thu Nov 22, 2012 11:55 pm
Hi,
Is there a way to get the current date via FWH from the internet?
Is there a way to get the current date via FWH from the internet?
www.FiveTechSoft.com
https://fivetechsoft.com/forums/
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" )
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
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 )
Thank you, but my necessity is to have in return the exact TIME more exactly possible.ADutheil wrote:I use this function to check date ...