Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
GMT time
Message
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Title:
Miscellaneous
Thread ID:
00090272
Message ID:
00090679
Views:
29
>There is a function (GetTimeZoneInformation) in the API which indcludes the date and the offset from UTC time. Unfortunately, it requires a structure and, for some reason, VFP keeps crashing whenever I try to access it, and I've tried several methods, all with the same result.

Here's a quick&dirty program that uses GetTimeZoneInformation:
declare integer GetTimeZoneInformation in Win32API ;
	string @lcStruct

*-- lcStruct is of type:
*!*	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;
*-- Total structure length: 172 chars
*-- Long = 16 bit signed integer
*-- WCHAR = Unicode char (16 bit)
	
*-- Initialize the output variable
lcStruct = replicate(chr(0), 172)

= GetTimeZoneInformation (@lcStruct)

*-- The LongToNumber(), WordToNumber() and UnicodeToANSI()
*   functions are defined at the end of this program.

? "Bias:          ", LongToNumber(left(lcStruct, 4))
?
? "Standard Time: ", UnicodeToANSI(substr(lcStruct, 5, 64))
? "Transition from daylight to standard time occurs on:"
? "Year: ", WordToNumber(substr(lcStruct, 69, 2))
? "Month: ", WordToNumber(substr(lcStruct, 71, 2))
? "Day of week: ", WordToNumber(substr(lcStruct, 73, 2))
? "Day: ", WordToNumber(substr(lcStruct, 75, 2))
? "Hour: ", WordToNumber(substr(lcStruct, 77, 2))
? "Minute: ", WordToNumber(substr(lcStruct, 79, 2))
? "Second: ", WordToNumber(substr(lcStruct, 81, 2))
? "MiliSec: ", WordToNumber(substr(lcStruct, 83, 2))
? "Bias: ", LongToNumber(substr(lcStruct, 85, 4))
?
? "Daylight Time: ", UnicodeToANSI(substr(lcStruct, 89, 64))
? "Transition from standard to daylight time occurs on:"
? "Year: ", WordToNumber(substr(lcStruct, 153, 2))
? "Month: ", WordToNumber(substr(lcStruct, 155, 2))
? "Day of week: ", WordToNumber(substr(lcStruct, 157, 2))
? "Day: ", WordToNumber(substr(lcStruct, 159, 2))
? "Hour: ", WordToNumber(substr(lcStruct, 161, 2))
? "Minute: ", WordToNumber(substr(lcStruct, 163, 2))
? "Second: ", WordToNumber(substr(lcStruct, 165, 2))
? "MiliSec: ", WordToNumber(substr(lcStruct, 167, 2))
? "Bias: ", LongToNumber(substr(lcStruct, 169, 4))
return

*==========================================
function LongToNumber
lparameter tcDWord

local lnReturn, lnI

if (type( "tcDWord") <> "C") or (len( tcDWord) < 4)
	return 0
endif

lnReturn = 0
for lnI = 1 to 4
	lnReturn = asc( substr( tcDWord, 5-lnI, 1)) + lnReturn
	if lnI <> 4
		lnReturn = lnReturn * 256
	endif
endfor

if lnReturn > 2147483647
	lnReturn = lnReturn - 0x100000000
endif

return lnReturn

*==========================================
function WordToNumber
parameter tcWord

local lnReturn, lnI

if (type( "tcWord") <> "C") or (len( tcWord) < 2)
	return 0
endif

lnReturn = asc( left( tcWord, 1)) + asc( substr( tcWord, 2, 1)) * 256

return lnReturn

*==========================================
function UnicodeToANSI
lparameter tcUnicodeString

local lcReturn, lnAt

lcReturn = strconv(strconv(tcUnicodeString, 6), 2)

lnAt = at(chr(0), lcReturn)
if lnAt > 0
	lcReturn = left(lcReturn, lnAt - 1)
endif

return lcReturn
Vlad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform