Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-模块/函数/VBA

如何修改系统短日期格式

时 间:2008-05-03 13:51:06
作 者:第7天   ID:668  城市:台州
摘 要:修改系统短日期格式
正 文:

本人在做应用程序时,发现在某些用户的机器上部分模块的查找和排序会出错,而且都和时间有关。经仔细检查得出结论如下:

在应用程序中使用 format("日期型数据","short date")把长日期格式成短日期,如果本地电脑系统的“短日期”格式不一样,会得到两种不同的结果。比如 同样是format("2008-5-1 23:01:20","short date")在短日期格式为"yyyy-m-d"的电脑上,得出的结果是"2008-5-1",而在短日期格式为"yyyy-mm-dd"的电脑上得到的结果是"2008-05-01"。说了半天,有什么不同?不都是表示同一天吗?

答案是:两种结果不同。因为被format格式以后的日期已经不再是日期了,ACCESS把它当作文本来处理。比如我们对三个文本进行升序排列:

第一种是:2008-4-30 ,2008-4-8,2008-5-1

第二种是:2008-04-08,2008-04-30,2008-05-01

可以看出两种不同的格式排序得到的结果是不一样的。使用between ....and...进行查找效果亦是如此。

所以我们大都喜欢自己的程序运行在短日期格式为"YYYY-MM-DD"的电脑上,这样我们格式成短日期以后的数据仍然可以正确的查找和排序。但往往事情并不是都按照理想的方向进行,有些用户的短日期格式就不是"YYYY-MM-DD",所以我们要对它修改。修改的代码如下:    

Public Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
设置短日期格式                                           
 Public Const LOCALE_SSHORTDATE = &H1F                                                                                                                Public Const LOCALE_SDATE = &H1D             

'下面的过程可以帮你达到目的

sub setshortdate()

 Dim llocal As Long
    Dim sa As String
    Dim lOk As Long
    On Error GoTo ErrShow
    sa = Space(20)
    llocal = GetUserDefaultLCID()
    lOk = GetLocaleInfo(llocal, LOCALE_SSHORTDATE, ByVal sa, 20)
    If Trim(sa) <> "yyyy-MM-dd" Then
        If MsgBox("您的系统日期不是(YYYY-MM-DD)格式,强烈建议您将它修改成该格式," & Chr(10) _
                & "否则软件可能会出现运行障碍!" _
                & Chr(10) & Chr(10) & "点击'是'将自动为您修改。", vbQuestion + vbYesNo, "忠告") = vbYes Then
            sa = "yyyy-MM-dd"
            llocal = GetUserDefaultLCID()
            SetLocaleInfo llocal, LOCALE_SSHORTDATE, ByVal sa
        End If
    End If
    sa = Space(2)
    lOk = GetLocaleInfo(llocal, LOCALE_SDATE, ByVal sa, 2)
    If Trim(sa) <> "-" Then
        sa = "-&q

Access软件网QQ交流群 (群号:483923997)       Access源码网店


常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助