Ошибка преобразования даты в VB6 - PullRequest
1 голос
/ 31 мая 2011

Если пользователь ввел дату 1 июня 2011 г. (01/06/2011) в формате дд / мм / гггг

после преобразования, он возвращает «6 января 2011» вместо «1 июня 2011».

Позвольте мне объяснить, как это преобразуется в 1 января 2011 года.

User entered = 01/06/2011 (dd/mm/yyyy)   i.e. 1st june 2011
After conversion it returns = 01/06/2011 (mm/dd/yyyy) i.e. 6th jan 2011

Помните: пользовательский формат даты не известен во время разработки.он извлекается из базы данных и сохраняется в переменной (строке)

Есть ли какое-либо решение?

Пожалуйста, предоставьте решение, касающееся только VB6, НЕ в .net

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Хорошо. Я написал свой собственный метод для разбивки даты на токены, так как я не нашел другого способа решить проблему.

0 голосов
/ 01 июня 2011

Вы можете использовать следующее, чтобы найти региональный формат даты пользователя:

Private 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
Private Const LOCALE_USER_DEFAULT = &H400
Private Const LOCALE_SSHORTDATE = &H1F ' short date format string
Private Const LOCALE_SLONGDATE = &H20 ' long date format string

Public Function GetUserShortDateFormat() As String
    Dim strLocale As String
    Dim lngRet As Long

    'Get short date format
    strLocale = Space(255)
    lngRet = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strLocale, Len(strLocale))
    strLocale = Left(strLocale, lngRet - 1)

    GetUserShortDateFormat = strLocale
End Function

Но это не гарантирует, что пользователь действительно ввел в этом формате.

Если вы считываете дату из поля столбца даты базы данных в переменную даты, она будет в этом формате.

...