VB °æ (¾«»ªÇø)
·¢ÐÅÈË: student (earth), ÐÅÇø: VB
±ê Ìâ: ÈçºÎʹÓà NetRemoteTOD À´´Ó·þÎñÆ÷»ñÈ¡ Date ºÍʱ¼äÐ
·¢ÐÅÕ¾: ¹þ¹¤´ó×϶¡Ïã (2001Äê11ÔÂ25ÈÕ19:17:50 ÐÇÆÚÌì), Õ¾ÄÚÐżþ
±¾ÎÄÐÅÏ¢ÊÊÓÃÓÚ:
Microsoft Visual FoxPro for Windows, version 6.0 :
Microsoft Windows NT 4.0
Microsoft Windows 2000 4.0
¸ÅÊö
ÔÚ Microsoft Windows NT 4.0 »ò Microsoft Windows 2000 ÖÐ, ¿ÉÒÔÏóÏÂÃæÒ»ÑùÓà N
ET ÃüÁîÀ´»ñÈ¡·þÎñÆ÷µÄÈÕÆÚºÍʱ¼ä:
NET TIME \\ServerName
Òª±ÜÃâÍâ¿Ç³ÌÐòµÄд¦ÀíµÄϵͳ¿ªÏú, ¿ÉÒÔÔÚ Windows NT ÏÂÒÔ±à³Ì·½Ê½Óà NetRemote
TOD API º¯Êý»ñÈ¡ÕâЩÐÅÏ¢.
¸ü¶àÐÅÏ¢
×¢Òâ: ÔÚ Windows 2000 ÖÕ¶Ë·þÎñ³ÌÐòÏÂÕâЩ´úÂëÔÚ Visual FoxPro Öв»Äܹ¤×÷.
±£´æ²¢ÔËÐÐÒÔÏ´úÂë, ÔÚÒÔÏÂÐÐÖÐÖ¸¶¨ÄãÏë²éѯʱ¼äµÄ·þÎñÆ÷Ãû:
server_name = "yourservername"
* NetRemoteTOD µÄµÚÒ»¸ö²ÎÊýÊÇÒ»¸öÖ¸Ïò°üº¬·þÎñÆ÷ÃûµÄ
* Unicode ´®µÄÖ¸Õë.
*
* µÚ¶þ¸ö²ÎÊýÊÇÖ¸Ïò°üº¬Ò»¸öÖ¸Ïò TIME_OF_DAY_INFO ½á¹¹µÄÖ¸ÕëµÄÒ»¸ö×Ö½ÚÊý×éµÄÖ¸
Õë(Ì«ÞÖ¿ÚÁË,ÔÎļûÏÂ)
* a pointer to a byte array containing a pointer to a TIME_OF_DAY_INFO struc
ture
* µÚ¶þ¸ö²ÎÊýµÄ '@' ǰ׺ ('integer @')
* ±íÃ÷¸Ã²ÎÊý°´Ö·´«µÝ. ÔÚ³ÌÐòµÄÉÔºó,
* ³ÌÐòʹÓà RTLMoveMemory() À´»ñÈ¡Õâ¸öÖ¸Ïò×Ö½ÚÊý×éµÄÖ¸ÕëµÄÄÚÈÝ
DECLARE INTEGER NetRemoteTOD IN netapi32 STRING @, INTEGER @
* ×¢ÒâÔ´µØÖ· ('inbuffer') ¶¨ÒåΪ integer,
* ÓëÉÏÃæµÄ NetRemoteTOD µÄµÚ¶þ¸ö²ÎÊýÒ»ÖÂ.
DECLARE INTEGER RtlMoveMemory IN win32api ;
STRING @outbuffer, ;
INTEGER inbuffer, ;
INTEGER bytes2copy
* TIME_OF_DAY_INFO ½á¹¹°üÀ¨
* 11 ¸ö DWORD ºÍ 1 ¸ö long,
* ¹² 48 ×Ö½Ú, Òò´Ë tdbuffout
* ³õʼ»¯Îª:
tdbuffout=REPLICATE(CHR(0), 48)
tdbuffin = 0
* ·þÎñÆ÷Ãû±ØÐëת»»Îª Unicode
* ¸Ã API º¯ÊýÐÐΪµÄ²îÒìÈ¡¾öÓÚ
* Ä¿±ê¼ÆËã»úÊDz»ÊÇÒ»¸ö Win2000 »úÆ÷ -
*
* Èç¹ûÊÇ Win2000, Ôò·þÎñÆ÷Ãû±ØÐëÇ°ÃæÓÐ "\\";
* ·ñÔò, ¾Í²»ÄÜÓÐ.
server_name = "yourservername"
try_server_name = STRCONV(server_name, 5)
rc = NetRemoteTOD(@try_server_name, @tdbuffin)
IF rc = 0
* ¸´ÖÆ tdbuffin ËùÖ¸ÏòµÄµØÖ·ÖеÄÄÚÈݵ½ tdbuffout
=RtlMoveMemory(@tdbuffout, tdbuffin, 48)
ELSE
* µ÷ÓÃʧ°Ü, Òò´ËÄ¿±ê¿ÉÄÜÊÇÒ»¸ö Win2000 ¿ò;
* ÖØÊÔº¯Êýµ÷ÓÃ, Ìí¼Óǰ׺ "\\" µ½ server_name
try_server_name = STRCONV("\\" + server_name, 5)
rc = NetRemoteTOD(@try_server_name, @tdbuffin)
IF rc = 0
* ¸´ÖÆ tdbuffin ËùÖ¸ÏòµÄµØÖ·ÖеÄÄÚÈݵ½ tdbuffout
=RtlMoveMemory(@tdbuffout, tdbuffin, 48)
ELSE
? "NetRemoteTOD() call failed. Return code is: ", rc
RETURN
ENDIF
ENDIF
* ʰȡ³ö TIME_OF_DAY_INFORMATION »º´æÖеÄÊʵ±²¿·Ö.
* ¸Ã»º´æ½«°üº¬ÓзþÎñÆ÷µÄ UTC (È«Çò×ù±êʱ¼ä) of the server,
* ¶ÔÓÚÕýÈ·µÄ±¾µØÊ±¼ä,ÇÒ±ØÐëµ÷Õûµ½ TOD_TIMEZONE ·Ö.
* str2long() ת»» DWORDS ºÍ LONGS ´Ó´®±íʾµ½ÊýÖµ.
tod_month = str2long(SUBSTR(tdbuffout, 37, 4))
tod_day = str2long(SUBSTR(tdbuffout, 33, 4))
tod_year = str2long(SUBSTR(tdbuffout, 41, 4))
tod_hours = str2long(SUBSTR(tdbuffout, 9, 4))
tod_mins = str2long(SUBSTR(tdbuffout, 13, 4))
tod_secs = str2long(SUBSTR(tdbuffout, 17, 4))
* ¼õÈ¥Õâ¸ö»ùÏß (³ËÒÔ 60, »ñµÃÃëÊý)
* À´´Ó datetime ÖµÀ´»ñµÃ·þÎñÆ÷µÄ±¾µØÊ±¼ä
*
* ¿ÉÑ¡µØ, Ҫת»»·þÎñÆ÷µÄ±¾µØÊ±¼äµ½¹¤×÷Õ¾µÄ±¾µØÊ±¼ä, ʹÓà Win32 API º¯Êý
* SystemTimeToTzSpecificLocalTime, ¸Ãº¯Êý½ö¿ÉÓÃÓÚ Windows NT.
tod_timezone = str2long(SUBSTR(tdbuffout, 25, 4)) * 60
serverdatetime = DATETIME(tod_year, tod_month, tod_day, ;
tod_hours, tod_mins, tod_secs)
? "UTC time of server is: ", serverdatetime
? "Server's local time is: ", serverdatetime - tod_timezone
*************************************************************
FUNCTION str2long
*************************************************************
* ²ÎÊý: µÍ¸ß ASCII ¸ñʽµÄ 4 ×Ö½Ú×Ö·û´® (m.longstr)
* ·µ»Ø: ³¤ÕûÐÍÖµ
* ʾÀý:
* m.longstr = "1111"
* m.longval = str2long(m.longstr)
PARAMETERS m.longstr
PRIVATE i, m.retval
m.retval = 0
FOR i = 0 TO 24 STEP 8
m.retval = m.retval + (ASC(m.longstr) * (2^i))
m.longstr = RIGHT(m.longstr, LEN(m.longstr) - 1)
NEXT
RETURN m.retval
Ô¶³Ì UTC ʱ¼äºÍ·þÎñÆ÷µÄ±¾µØÊ±¼ä³öÏÖÔÚ Visual FoxPro ×ÀÃæÉÏ.
²Î¿¼
MSDN ÖÐµÄ "NetRemoteTOD" ºÍ "RTLMovememory" Ö÷Ìâ
--
¡ù À´Ô´:¡¤¹þ¹¤´ó×϶¡Ïã bbs.hit.edu.cn¡¤[FROM: 202.118.236.168]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º2.081ºÁÃë