回 帖 发 新 帖 刷新版面

主题:VB中怎样获取各设置当前时区?

不知哪位牛人可以告诉我?

回复列表 (共6个回复)

沙发

可以采用对照的方法。

可以设定北京时间为参照时间,然后自己设计一个算法,对照后,比北京时间多几个小时,然后除以2,就表示差几个时区。

板凳

Declare Function GetTimeFormat Lib "kernel32" Alias "GetTimeFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, lpTime As SYSTEMTIME, ByVal lpFormat As String, ByVal lpTimeStr As String, ByVal cchTime As Long) As Long
说明
针对当前指定的“地方”,按特定的格式格式化一个系统时间
返回值
Long,格式化过后的字串的长度。零表示出错。会将GetLastError设置为下述值之一:ERROR_INSUFFICIENT_BUFFER,ERROR_INVALID_FLAGS,ERROR_INVALID_PARAMETER
参数表
参数 类型及说明
Locale Long,决定了具体格式的地方ID。lpFormat参数中指定的任何信息(倘若不是NULL)都要优先于各地方不同的特别信息
dwFlags Long,如指定了lpFormat,那么该参数应该为零。否则,可设为LOCALE_NOUSEROVERRIDE,表示强制使用系统地方参数——即使它们已由用户更改。用DATE_SHORTDATE或DATE_LONGDATE选择不同的日期格式
lpTime SYSTEMTIME,用于包容系统时间的一个结构
lpFormat String,可设为NULL,使用特定于不同地方的值(用vbNullString传递一个NULL)。否则包含一个时间格式字串。对h,hh,hhh,hhhh,m,mm,s,ss这样的代码来说,它们的用法与在vb格式命令中的用法是相同的。t和tt用于指定一个时间段标志(A或AM,P或PM)
lpTimeStr String,指定一个缓冲区,用于容纳格式化过后的字串。注意事先对字串的长度进行正确的预初始化
cchTime Long,lpTimeStr缓冲区的长度。如为零,表示函数会返回需要缓冲区的大小
注解
对于dwFlags参数的解释可能翻译有错误。原文为:
If lpFormat is specified, this should be zero. Otherwise, may be set to LOCALE_NOUSEROVERRIDE to force the system locale parameters to be used even if they have been overridden by the user. Use the self-explanatory constants TIME_NOMINUITESORSECONDS, TIME_NOSECONDS, or TIME_FORCE24HOURFORMAT to choose between date formats. Constant TIME_NOMARKER removes the AM or PM marker.





GetTimeZoneInformation

VB声明
Declare Function GetTimeZoneInformation Lib "kernel32" Alias "GetTimeZoneInformation" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
说明
在一个TIME_ZONE_INFORMATION结构中载入与系统时区设置有关的信息
返回值
Long,下述常数之一:
TIME_ZONE_ID_INVALID 函数执行失败,会设置GetLastError
TIME_ZONE_ID_UNKNOWN 时区未知(可能仍然指定了bias值)
TIME_ZONE_ID_STANDARD 标准时间有效
TIME_ZONE_ID_DAYLIGHT 夏令时有效
参数表
参数 类型及说明
lpTimeZoneInformation TIME_ZONE_INFORMATION,用于载入时区信息的结构
注解
在lpTimeZoneInformation结构中为本地时间添加bias信息,从而获得系统时间。TIME_ZONE_INFORMATION结构内部的DaylightName和StandardName字串肯定采用Unicode格式


3 楼

非常感谢楼上的作答。但是我还是做不出来,可否给我一个源代码参考一下?主要是因为我想做一个网络校时程序,但从时间服务器传回的是格林尼冶时间,所以要根据系统的当前时区求出本地时间,请帮帮我,感激不尽!!!

4 楼


    如果是这样,那就简单了,直接可以把标准时间写入就可以了。WIN会自动调整时区的。
    原码如下:
    Declare Function SetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) As Long
    Type SYSTEMTIME '可别告诉我你连下面最简单的E文也看不懂
            wYear As Integer
            wMonth As Integer
            wDayOfWeek As Integer
            wDay As Integer
            wHour As Integer
            wMinute As Integer
            wSecond As Integer
            wMilliseconds As Integer'设置毫秒,不用理它
    End Type

    Dim GMTime As SYSTEMTIME
    SetSystemTime GMTime


比如:要把时间(格林时间)改为凌晨1点,则:
    GMTime.wHour=1
    然后SetSystemTime GMTime 就可以了.
    该函数直接使用的就是格林时间.





-----------------------------------------------
我编了三年程序       只用过VB
我用了三年VB         只用过WINSOCK
我用了三年WINSOCK    只用过UDP和TCP
我用了三年UDP和TCP   原来都用的是IP这一个协议
http://www.offca.com/gps/iphonebbs/index.asp
**********中国网络程序开发联盟欢迎你**********
-----------------------------------------------
 

5 楼

此地原来高手如云,小弟[佩服佩服!!!!!!!!

6 楼

我到那里去找setsystemtime,我安装了.net2003可是没有这个方法,编译通不过

我来回复

您尚未登录,请登录后再回复。点此登录或注册