Hi Alejandro,
long time, no see. Here's a Findtime() function I found many years ago. You must change it a little bit, but that is "piece of cake" for you.
#define INTERNET_OPEN_TYPE_PRECONFIG 0x00
#define INTERNET_FLAG_RELOAD 0x80000000
#define BEGIN_UTC_TIME 0x69
#define LEN_UTC_TIME 0x11
#define TIME_ZONE_ID_UNKNOWN 0x00
#define TIME_ZONE_ID_STANDARD 0x01
#define TIME_ZONE_ID_DAYLIGHT 0x02
#DEFINE ID_INVALID -1
#DEFINE ID_UNKNOWN 0
#DEFINE ID_STANDARD 1
#DEFINE ID_DAYLIGHT 2
DECLARE INTEGER InternetOpen IN wininet STRING lpszAgent, INTEGER dwAccessType, STRING lpszProxy, STRING lpszProxyBypass, INTEGER dwFlags
DECLARE INTEGER InternetCloseHandle IN wininet INTEGER hInternet
DECLARE INTEGER InternetOpenUrl IN wininet INTEGER hInternet, STRING lpszUrl, STRING lpszHeaders, INTEGER dwHeadersLength, INTEGER dwFlags, INTEGER dwContext
DECLARE INTEGER InternetReadFile IN wininet INTEGER hFile, STRING @lpBuffer, INTEGER dwNumberOfBytesToRead, INTEGER @lpdwNumberOfBytesRead
DECLARE LONG SetLocalTime IN win32api STRING @
DECLARE INTEGER GetLocalTime IN win32api STRING @
LOCAL m.hInternet, m.Context, m.hHttp, m.buff, m.NumberOfBytesRead, m.bRet
LOCAL m.utcTimeBuff, m.mntbuff, m.nYear, m.nMonth, m.nDay, m.nHour, m.nMin, m.nSec
m.hInternet = InternetOpen("BSAtomicEdu", INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, 0)
if m.hInternet == 0
MessageBox("Internet open error! Test your system and try again.")
return
ENDIF
m.Context = 777
m.hHttp = InternetOpenUrl(m.hInternet, [http://tycho.usno.navy.mil/cgi-bin/timer.pl], NULL, -1, INTERNET_FLAG_RELOAD, Context)
IF hHttp == 0
MessageBox("URL open error!")
InternetCloseHandle(m.hInternet)
return
ENDIF
m.buff = SPACE(1024)
m.NumberOfBytesRead = 0
m.bRet = InternetReadFile(m.hHttp, @m.buff, 1024, @m.NumberOfBytesRead)
InternetCloseHandle(m.hHttp)
InternetCloseHandle(m.hInternet)
IF m.bRet == 0
MessageBox( "URL reading error! Test internet connection and try again.")
RETURN
ENDIF
MessageBox(m.buff)
m.utcTimeBuff = SUBSTR(buff,BEGIN_UTC_TIME,LEN_UTC_TIME)
m.mntbuff ="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
nYear = YEAR(DATE())
nMonth = INT(AT(UPPER(left(utcTimeBuff,3)),mntbuff)/3)+1
nDay = VAL(SUBSTR(utcTimeBuff,6,2))
nHour = VAL(SUBSTR(utcTimeBuff,10,2))
nMin = VAL(SUBSTR(utcTimeBuff,13,2))
nSec = VAL(SUBSTR(utcTimeBuff,16,2))
VFPSetDateTime(m.nYear, m.nMonth, m.nDay, m.nHour, m.nMin, m.nSec)
CLEAR DLLS
FUNCTION VFPSetDateTime(m.pYear, m.pMonth, m.pDay, m.pHour, m.pMinute, m.pSecond)
LOCAL oUniverslTime AS Custom, oLocalTime AS Custom, oNewTime AS Custom
LOCAL m.lpcount, m.cBuff, m.sYear, m.sMonth, m.sWeekDay, m.sDay, m.sHour, m.sMinute, m.sSecond, m.sMinSecond
LOCAL m.nYear, m.nMonth, m.nDay, m.nWeekDay, m.nHour, m.nMinute, m.nSecond, m.nMinSecond
m.lpcount = PCOUNT()
IF m.lpcount < 3
MESSAGEBOX("Usage: VFPSetDateTime(Year, Month, Day [[[, Hour ], Minute ], Second ])", ;
32, "Wrong Usage, Note: Only for 24 Hours Setting")
RETURN
ENDIF
m.cBuff = SPACE(16)
GetLocalTime(@cBuff)
m.sYear = ALLTRIM(STR( ASC(SUBSTR(cBuff,1,1))+ASC(SUBSTR(cBuff,2,1))*256))
m.sMonth = ALLTRIM(STR( ASC(SUBSTR(cBuff,3,1))+ASC(SUBSTR(cBuff,4,1))*256))
m.sWeekDay = ALLTRIM(STR( ASC(SUBSTR(cBuff,5,1))+ASC(SUBSTR(cBuff,6,1))*256))
m.sDay = ALLTRIM(STR( ASC(SUBSTR(cBuff,7,1))+ASC(SUBSTR(cBuff,8,1))*256))
m.sHour = ALLTRIM(STR( ASC(SUBSTR(cBuff,9,1))+ASC(SUBSTR(cBuff,10,1))*256))
m.sMinute = ALLTRIM(STR( ASC(SUBSTR(cBuff,11,1))+ASC(SUBSTR(cBuff,12,1))*256))
m.sSecond = ALLTRIM(STR( ASC(SUBSTR(cBuff,13,1))+ASC(SUBSTR(cBuff,14,1))*256))
m.sMinSecond = ALLTRIM(STR( ASC(SUBSTR(cBuff,15,1))+ASC(SUBSTR(cBuff,16,1))*256))
m.nYear = pYear
m.nMonth = pMonth
m.nDay = pDay
m.nWeekDay = DOW(CTOD(ALLTRIM(STR(nMonth)) + [/] + ALLTRIM(STR(nDay)) + [/] + ALLTRIM(STR(nYear))))
DO CASE
CASE m.lpcount = 3
m.nHour = HOUR(DATETIME())
m.nMinute = MINUTE(DATETIME())
m.nSecond = SEC(DATETIME())
CASE m.lpcount = 4
m.nHour = pHour
m.nMinute = MINUTE(DATETIME())
m.nSecond = SEC(DATETIME())
CASE m.lpcount = 5
m.nHour = pHour
m.nMinute = pMinute
m.nSecond = SEC(DATETIME())
CASE m.lpcount = 6
m.nHour = pHour
m.nMinute = pMinute
m.nSecond = pSecond
ENDCASE
m.nMinSecond = VAL(sMinSecond)
oUniverslTime = CREATEOBJECT("Custom")
oUniverslTime.AddProperty("Year" ,pYear)
oUniverslTime.AddProperty("Month" ,pMonth)
oUniverslTime.AddProperty("Day" ,pDay)
oUniverslTime.AddProperty("Hour" , pHour)
oUniverslTime.AddProperty("Minute" , pMinute)
oUniverslTime.AddProperty("Seconds", pSecond)
oLocalTime = CREATEOBJECT("Custom")
oLocalTime.AddProperty("Year" , nYear)
oLocalTime.AddProperty("Month" , nMonth)
oLocalTime.AddProperty("Day" , nDay)
oLocalTime.AddProperty("Hour" , nHour)
oLocalTime.AddProperty("Minute" , nMinute )
oLocalTime.AddProperty("Seconds", nSecond )
oNewTime = LocalZoneTime(oUniverslTime, oLocalTime)
nBuff = CHR(oNewTime.Year%256) + CHR(INT(oNewTime.Year/256)) +;
CHR(oNewTime.Month%256) + CHR(INT(oNewTime.Month/256)) +;
CHR(nWeekday%256) + CHR(INT(nWeekday/256)) +;
CHR(oNewTime.Day%256) + CHR(INT(oNewTime.Day/256)) +;
CHR(oNewTime.Hour%256) + CHR(INT(oNewTime.Hour/256)) +;
CHR(oNewTime.Minute%256) + CHR(INT(oNewTime.Minute/256))+;
CHR(oNewTime.Seconds%256) + CHR(INT(oNewTime.Seconds/256))+;
CHR(nMinSecond%256) + CHR(INT(nMinSecond/256))
SetLocalTime(@nBuff)
ENDPROC
FUNCTION LocalZoneTime(oUniverslTime AS Collection , oLocalTime AS Collection)
TZInfo = REPLICATE(CHR(0),172)
DECLARE INTEGER GetTimeZoneInformation IN kernel32 STRING @TZInfo
liRetCode = GetTimeZoneInformation(@TZInfo)
DO CASE
CASE liRetCode = ID_UNKNOWN
=MESSAGEBOX ("TIME_ZONE_ID_UNKNOWN")
RETURN oUniverslTime
CASE liRetCode = ID_STANDARD
=MESSAGEBOX ("TIME_ZONE_ID_STANDARD")
CASE liRetCode = ID_DAYLIGHT
=MESSAGEBOX ("TIME_ZONE_ID_DAYLIGHT")
ENDCASE
liBias = StrToLong(SUBSTR(TZInfo, 1, 4)) - 2 ^ 32
lcStandardName = SUBSTR(TZInfo, 5, 64)
lcStandardName = STRTRAN(lcStandardName, CHR(0), "")
lcStandardDate = SUBSTR(TZInfo, 69, 16)
lcSDYear = Str2Word(SUBSTR(lcStandardDate, 1, 2))
lcSDMonth = Str2Word(SUBSTR(lcStandardDate, 3, 2))
lcSDDayofWeek = Str2Word(SUBSTR(lcStandardDate, 5, 2))
lcSDDay = Str2Word(SUBSTR(lcStandardDate, 7, 2))
lcSDHour = Str2Word(SUBSTR(lcStandardDate, 9, 2))
lcSDMinute = Str2Word(SUBSTR(lcStandardDate, 11, 2))
lcSDSecond = Str2Word(SUBSTR(lcStandardDate, 13, 2))
lcSDMSec = Str2Word(SUBSTR(lcStandardDate, 15, 2))
liStandardBias = StrToLong(SUBSTR(TZInfo, 85, 4))
lcDaylightName = SUBSTR(TZInfo, 89, 64)
lcDaylightName = STRTRAN(lcDaylightName, CHR(0), "")
lcDaylightDate = SUBSTR(TZInfo, 153, 16)
lcDDYear = Str2Word(SUBSTR(lcDaylightDate, 1, 2))
lcDDMonth = Str2Word(SUBSTR(lcDaylightDate, 3, 2))
lcDDDayofWeek = Str2Word(SUBSTR(lcDaylightDate, 5, 2))
lcDDDay = Str2Word(SUBSTR(lcDaylightDate, 7, 2))
lcDDHour = Str2Word(SUBSTR(lcDaylightDate, 9, 2))
lcDDMinute = Str2Word(SUBSTR(lcDaylightDate, 11, 2))
lcDDSecond = Str2Word(SUBSTR(lcDaylightDate, 13, 2))
lcDDMSec = Str2Word(SUBSTR(lcDaylightDate, 15, 2))
liDaylightBias = StrToLong(SUBSTR(TZInfo, 169, 4)) - 2 ^ 32
nZoneCorrection = liBias
DO CASE
CASE liRetCode == TIME_ZONE_ID_STANDARD
nZoneCorrection = nZoneCorrection + liStandardBias
CASE liRetCode== TIME_ZONE_ID_DAYLIGHT
nZoneCorrection = nZoneCorrection + liDaylightBias
ENDCASE
nZoneCorrection = -nZoneCorrection
nTotalMinutes = oUniverslTime.Hour * 60 + oUniverslTime.Minute + nZoneCorrection
IF nTotalMinutes < 0
nTotalMinutes = nTotalMinutes + 24*60
ENDIF
IF nTotalMinutes>24*60
nTotalMinutes = nTotalMinutes - 24*60
ENDIF
oLocalTime.Year = oUniverslTime.Year
oLocalTime.Month = oUniverslTime.Month
oLocalTime.Day = oUniverslTime.Day
oLocalTime.Hour = INT(nTotalMinutes /60)
oLocalTime.Minute = nTotalMinutes - oLocalTime.Hour*60
oLocalTime.Seconds = oUniverslTime.Seconds
RETURN oLocalTime
FUNCTION StrToLong(m.lcLongstr)
LOCAL i, lnRetval
m.lnRetval = 0
FOR m.i = 0 TO 24 STEP 8
m.lnRetval = m.lnRetval + (ASC(m.lcLongstr) * (2^i))
m.lcLongstr = RIGHT(m.lcLongstr, LEN(m.lcLongstr) - 1)
NEXT
RETURN lnRetval
FUNCTION Str2Word(m.wordstr)
LOCAL m.i, m.retval
m.retval = 0
FOR i = 0 TO 8 STEP 8
m.retval = m.retval + (ASC(m.wordstr) * (2^i))
m.wordstr = RIGHT(m.wordstr, LEN(m.wordstr) - 1)
NEXT
RETURN m.retval
>How can you find out current date from the web (not using DATE() function)
>
>TIA,
>
>Alex