你不如全部转换成"yyyy-mm-dd"格式。

解决方案 »

  1.   

    什么意思,你是指在代码中每遇到日期时就用format转换成"yyyy-mm-dd"格式吗?
    这样多不方便,我是在程序完成后,客户才提出来的。我不总不能重新改一遍程序吧。
      

  2.   

    可我发现有的软件,在一运行时就先检测系统日期格式,如果不是"yyyy-mm-dd",就提示要求到控制面板中把日期格式设为“yyyy-mm-dd”。
    我用getformat()函数得到当前日期的格式,可是系统不认getformat函数。请问有没有得到日期格式的函数呢?谢谢。
      

  3.   

    to ozw:
       开始---控制制面板--区域设置--日期--日期样式
    日期样式有多种,你可以自行选择。
       如果系统日期没有指定的格式,那么。我们用format()函数来做什么呢?
       你见过用友软件吗?我想实现的跟用友差不多,也是在程序一启动时就检测当前date的格式。如果不是"yyyy-mm-dd"就自动设为“yyyy-mm-dd”格式,
       
      

  4.   

    注册表的键
    HKEY_CURRENT_USER/Control Panel/International/sShortDate
    看来你只要读写这个键就可以实现了
      

  5.   

    把以下代码写到一个bas中
    '=========================================================='
    '                     API Declarations                     '
    '=========================================================='
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long'=========================================================='
    '                      Private Structs                     '
    '=========================================================='
    Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128      '  Maintenance string for PSS usage
    End Type'=========================================================='
    '                   Private Enumerations                   '
    '=========================================================='
    Private Enum OSVersions
        VER_PLATFORM_WIN32_NT = 2
        VER_PLATFORM_WIN32_WINDOWS = 1
        VER_PLATFORM_WIN32s = 0
    End Enum
    '=========================================================='
    '                   Public Enumerations                    '
    '=========================================================='
    Public Enum hKey
        HKEY_CLASSES_ROOT = &H80000000
        HKEY_CURRENT_USER = &H80000001
        HKEY_LOCAL_MACHINE = &H80000002
        HKEY_USERS = &H80000003
        HKEY_CURRENT_CONFIG = &H80000005
        HKEY_DYN_DATA = &H80000006
    End EnumPublic Enum DataType
        KEY_NOTIFY = &H10
        READ_CONTROL = &H20000
        STANDARD_RIGHTS_READ = (READ_CONTROL)
        STANDARD_RIGHTS_WRITE = (READ_CONTROL)
        KEY_QUERY_VALUE = &H1
        KEY_SET_VALUE = &H2
        KEY_ENUMERATE_SUB_KEYS = &H8
        KEY_CREATE_SUB_KEY = &H4
        Synchronize = &H100000
        REG_SZ = 1            ' Unicode nul terminated string
        KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not Synchronize))
        KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not Synchronize))
    End Enum'=========================================================='
    '                      Public Methods                      '
    '=========================================================='' Procedure Creates a key in the reg
    Public Sub CreateKey(ByVal hKey As hKey, ByVal sLocation As String)
        Dim regHwnd&
        RegCreateKey hKey, sLocation, regHwnd
        RegCloseKey regHwnd
    End Sub' Procedure writes a value to a key
    Public Sub SetKeyValue(ByVal hKey As hKey, ByVal sLocation$, ByVal sKeyName$, ByVal sValue$)
        Dim hwndKey&
        If (RegOpenKeyEx(hKey, sLocation, 0, DataType.KEY_WRITE, hwndKey) = ERROR_SUCCESS) Then
        
            RegSetValueEx hwndKey, sKeyName, 0, DataType.REG_SZ, ByVal sValue, Len(sValue)
            RegCloseKey hwndKey
        End If
    End Sub' Procedure retrieves a value from a key
    Public Function GetKeyStringValue(ByVal hKey As hKey, ByVal sLocation$, ByVal sKeyName$) As String
        Dim hwndKey&, sRecieved As String
        
        sRecieved = Space(255)
        
        If (RegOpenKeyEx(hKey, sLocation, 0, DataType.KEY_READ, hwndKey) = ERROR_SUCCESS) Then
        
            If (RegQueryValueEx(hwndKey, sKeyName, 0, DataType.REG_SZ, ByVal sRecieved, Len(sRecieved)) = ERROR_SUCCESS) Then
                GetKeyStringValue = TrimNull(sRecieved)
            Else
                GetKeyStringValue = ""
            End If        RegCloseKey hwndKey
        End If
    End Function' Procedure removes a Key
    Public Sub RemoveKey(ByVal hKey As hKey, ByVal sLocation$)
        RegDeleteKey hKey, sLocation
    End Sub'=========================================================='
    '                     Private Functions                    '
    '=========================================================='' Function removes the extra space from the string starting from the nullchar
    Private Function TrimNull(ByVal szNull As String) As String
        Dim m%
        
        m = InStr(szNull, Chr$(0))
        If (m) Then                                 ' Win95 puts adds a null value
            TrimNull = Mid$(szNull, 1, m - 1)
            
        Else
            TrimNull = ""                           ' WinNT does not add a nullchar
        End If
    End Function然后在你要设置的地方写上以下代码    Dim SysFormat As String
        SysFormat = LCase(GetKeyStringValue(hKey.HKEY_CURRENT_USER, "Control Panel\International", "sShortDate"))
        If SysFormat <> "yyyy-mm-dd" Then
            SysFormat = "yyyy-MM-dd"
            SetKeyValue hKey.HKEY_CURRENT_USER, "Control Panel\International", "sShortDate", SysFormat
        End If
      

  6.   

    太复杂了。我没用。我在程序一运行时就判断了系统日期格式。如果不是"yyyy-mm-dd"
    就中止程序。要求设为此格式。这种方法很笨。可是省事。
    :)