VB6中的日期转换错误

VB6中的日期转换错误,vb6,date-conversion,Vb6,Date Conversion,如果用户以dd/mm/yyyy格式输入日期为2011年6月1日(2011年6月1日) 转换后返回“2011年1月6日”,而不是“2011年6月1日” 让我解释一下它是如何在2011年1月1日转换的 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 请记住:用户日期格式在设计时是未知的

如果用户以dd/mm/yyyy格式输入日期为2011年6月1日(2011年6月1日)

转换后返回“2011年1月6日”,而不是“2011年6月1日”

让我解释一下它是如何在2011年1月1日转换的

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
请记住:用户日期格式在设计时是未知的。它正在从数据库中提取并存储在变量(字符串)中

有什么解决办法吗


请仅在.net中提供与VB6相关的解决方案。您可以使用以下内容查找用户区域日期格式设置:

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
但这并不能保证用户确实是以这种格式输入的


如果将数据库日期列字段中的日期读入日期变量,则该字段将采用此格式。

很好,我已经编写了自己的方法将日期分解为标记,因为我没有找到其他方法来解决此问题。

如果用户日期格式未知,您如何知道用户的意思是六月一日而不是一月六日?在测试时,我们从数据库中获取了用户格式,即“dd/mm/yyyy”,并将其存储在一个变量中。我之所以说在设计时不知道用户格式,是因为任何专家的建议都不应该基于日期格式总是“dd/mm/yyyy”的假设。格式也可能不同。你知道格式字符串的结构吗?它可以是“yyyy-mm-dd”,“dd/mm/yyyy hh:mm:ss”…?是的,它不包括时间格式。因此,它可以是“dd/mm/yyyy”/“yyy/dd/mm”或“yyyy/mm/dd”或其他任何形式。唯一可靠的解决方案就是将用户输入的字符串解析为令牌,并从中生成日期。涉及一些文本处理(例如尝试拉脱维亚日期:))另一种方法是强制用户单独输入所有日期部分;您可以根据存储的格式构建UI。