Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to find current date from web
Message
From
05/03/2010 07:19:58
 
 
To
05/03/2010 07:18:16
General information
Forum:
Visual FoxPro
Category:
Web Services
Environment versions
Visual FoxPro:
VFP 9 SP1
Miscellaneous
Thread ID:
01452651
Message ID:
01452746
Views:
53
Most likely not, unfortunately.

>Thank you Tore. I won't need the complete procedure but the information is useful.
>
>Did you go to SWFox last year? I couldn't unfortunately, but hope to be able this year.
>
>Alex
>
>>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.
>>*****************************************************************************************
>>**** Internet syncronization time base on article 
>>**** founded at http://www.programmersheaven.com/articles/userarticles/atomicsync.htm
>>*****************************************************************************************
>>
>>
>>#define INTERNET_OPEN_TYPE_PRECONFIG            0x00         && use registry 
>>#define INTERNET_FLAG_RELOAD                    0x80000000   && retrieve the original item
>>#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
>>
>>
>>**** DLL Declarations
>>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()) && :o))))
>>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)
>>
>>   ************************************************************************
>>   **** Taken from www.levelextreme.com FAQ #<A HREF="/wconnect/wc.dll?LevelExtreme~2,84,14,7864" TARGET="_blank">7864</A>
>>   **** Created by Terence Tam - Hong Kong
>>   ************************************************************************
>>
>>    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)    && Each Information (WORD) worth 2 bytes
>>    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)))) && MDY
>>
>>    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)
>>
>>    *******************************
>>    *** Changes made by me :o)
>>    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)
>>
>>
>>   ************   ************   ************   ************   ************   ************
>>   ** Taken from MSDN HOWTO: Obtain Time Zone Information in Visual FoxPro
>>   ** Article KB194576
>>   ************   ************   ************   ************   ************   ************
>>
>>   * the definition for TIME_ZONE_INFORMATION is:
>>   *
>>   *typedef struct _TIME_ZONE_INFORMATION { // tzi
>>   *    LONG       Bias;
>>   *    WCHAR      StandardName[ 32 ];
>>   *    SYSTEMTIME StandardDate;
>>   *    LONG       StandardBias;
>>   *    WCHAR      DaylightName[ 32 ];
>>   *    SYSTEMTIME DaylightDate;
>>   *    LONG       DaylightBias;
>>   *} TIME_ZONE_INFORMATION;
>>
>>   * buffer to receive TIME_ZONE_INFORMATION
>>   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
>>
>>   * now, parse the returned structure
>>   * Daylight savings time bias is a negative value
>>   * stored in 2s complement, so subtract 2^32 to obtain a decimal value
>>   liBias = StrToLong(SUBSTR(TZInfo, 1, 4))  - 2 ^ 32
>>
>>   * lcStandardName is a Unicode string - strip out chr(0)s for
>>   * US/English
>>   lcStandardName = SUBSTR(TZInfo, 5, 64)
>>   lcStandardName = STRTRAN(lcStandardName, CHR(0), "")
>>
>>   * lcStandardDate is a SYSTEMTIME structure, defined as follows:
>>   *
>>   *typedef struct _SYSTEMTIME {  // st
>>   *    WORD wYear;
>>   *    WORD wMonth;
>>   *    WORD wDayOfWeek;
>>   *    WORD wDay;
>>   *    WORD wHour;
>>   *    WORD wMinute;
>>   *    WORD wSecond;
>>   *    WORD wMilliseconds;
>>   *} SYSTEMTIME;
>>
>>   * this SYSTEMTIME struct must be parsed again
>>   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 is also a Unicode string
>>   lcDaylightName = SUBSTR(TZInfo, 89, 64)
>>   lcDaylightName = STRTRAN(lcDaylightName, CHR(0), "")
>>
>>   * this SYSTEMTIME struct must be parsed again, same as above
>>   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))
>>
>>
>>   * Daylight savings time bias is a negative value
>>   * stored in 2s complement, so subtract 2^32 to obtain a decimal value
>>   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)
>>*********************
>>   * Passed:  4-byte character string (lcLongstr) in low-high ASCII format
>>   * Returns:  long integer value
>>   * Example:
>>   * m.longstr = "1111"
>>   * m.longval = strtolong(m.longstr)
>>
>>   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
Previous
Reply
Map
View

Click here to load this message in the networking platform