VB.NET-任何字符串到日期的转换

VB.NET-任何字符串到日期的转换,vb.net,string,date,string-conversion,Vb.net,String,Date,String Conversion,简短的问题。我正在尝试将字符串转换为日期(以便稍后将其放入INSERT命令)。我的问题是,我正在读取的字符串总是不同的(没有规则它将是什么格式-因为这取决于用户) 我在stackoverflow上发现了这样一段代码: DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",

简短的问题。我正在尝试将字符串转换为日期(以便稍后将其放入INSERT命令)。我的问题是,我正在读取的字符串总是不同的(没有规则它将是什么格式-因为这取决于用户)

我在stackoverflow上发现了这样一段代码:

DateTime myDate = 
    DateTime.ParseExact("2009-05-08 14:40:52,531", 
                        "yyyy-MM-dd HH:mm:ss,fff",
                        System.Globalization.CultureInfo.InvariantCulture)
但在我的情况下,它将不会工作,因为我不知道什么样的格式,我要导入。 是否有检查所有已知格式的通用导入功能?如果现在我该怎么写呢?(请给我一些提示)

感谢您提前提供的任何提示和提示,
Pete

不,这是不可能的,但是您可以在数组中定义可能的
格式
,并将其传递给
ParseExact
TryParseExact
方法

Dim format() As String = {"dd-MM-yy", "dd/MM/yy"}

Dim myDate As DateTime = DateTime.ParseExact("2009-05-08 14:40:52,531",format, 
                      System.Globalization.CultureInfo.InvariantCulture))

否这是不可能的,但是您可以在数组中定义可能的
格式
,并将其传递给
ParseExact
TryParseExact
方法

Dim format() As String = {"dd-MM-yy", "dd/MM/yy"}

Dim myDate As DateTime = DateTime.ParseExact("2009-05-08 14:40:52,531",format, 
                      System.Globalization.CultureInfo.InvariantCulture))
如果在用户输入日期时,您没有(或无法)验证该日期(以确保该日期有效),那么您就有点麻烦了

考虑到当地情况,2011年1月2日可能是2月1日(爱尔兰、英国和欧洲),也可能是1月2日(美国)

即使忽略当地人,它也会变得毛茸茸的,有人把它放在“2011年10月13日星期四”,13日是星期四,如果他们把它放错了,放在“2011年10月13日星期五”,或者他们只放在10月11日星期五,是今天(2011年10月14日星期五)还是2011年11月的某个星期五

然后你得到了进入“下周四”的直观用户,理论上你也可以处理这个问题,是吗

然后你会得到打字错误,112//2011,是2011年11月2日还是2011年1月12日

这里有太多的错误,做任何你需要做的事情来确保用户输入是有效的,如果你必须的话,移动天堂和地球,但是在用户输入数据的地方这样做。

如果你没有(或不能)验证用户输入的日期(以确保它是一个有效的日期),那么你就有点完蛋了

考虑到当地情况,2011年1月2日可能是2月1日(爱尔兰、英国和欧洲),也可能是1月2日(美国)

即使忽略当地人,它也会变得毛茸茸的,有人把它放在“2011年10月13日星期四”,13日是星期四,如果他们把它放错了,放在“2011年10月13日星期五”,或者他们只放在10月11日星期五,是今天(2011年10月14日星期五)还是2011年11月的某个星期五

然后你得到了进入“下周四”的直观用户,理论上你也可以处理这个问题,是吗

然后你会得到打字错误,112//2011,是2011年11月2日还是2011年1月12日



这里有太多的错误,做任何你需要做的事情来确保用户的输入是有效的,如果你必须的话,移动天堂和地球,但是在用户输入数据的地方这样做。

我不确定通用功能是否可行。例如,2011年5月3日是5月3日还是3月5日?取决于你住在哪里。此外,您可能需要缩小支持的格式范围。例如,您希望它能够将“明天”转换为有效日期吗?问题是,
2009-05-08
可能是
yyyy-MM-dd
yyy-dd-MM
-如果没有额外信息,您无法将该字符串明确地转换为日期……或者更糟糕的是:
05/06/07
。其中哪一部分是年、月、日?我知道在我所在的地区,人们通常会这样理解,但对于格式没有更严格的规定,至少可以是4个不同的日期。我不确定一个通用函数是否可行。例如,2011年5月3日是5月3日还是3月5日?取决于你住在哪里。此外,您可能需要缩小支持的格式范围。例如,您希望它能够将“明天”转换为有效日期吗?问题是,
2009-05-08
可能是
yyyy-MM-dd
yyy-dd-MM
-如果没有额外信息,您无法将该字符串明确地转换为日期……或者更糟糕的是:
05/06/07
。其中哪一部分是年、月、日?我知道在我的世界里,人们通常会这样理解,但是对于格式没有更严格的规则,至少可以是4个不同的日期。如果我把所有格式都放在format()中,然后在循环中进行测试,如果没有一个合适的格式,就会抛出一个异常?@Pete-如果有一个以上的格式适合呢?你会选第一个吗?最后一个?我刚刚检查了我的数据库。我使用SQLCE,其中我使用日期单元格的“datetime”格式。从stackoverflow的另一篇文章中,我读到它是“dd-MM-yyy-HH:MM:ss.fff”。如果超过1个适合,我就买第一个。或者我会选择我粘贴在这里的模式所接受的模式。@Pete最好的方法是限制用户以特定格式输入日期。有很多方法-DateTimepicker、input mask等。如果我将所有格式都放在format()中,然后在循环中测试它,如果它们都不合适,则抛出异常,这是否合理?@Pete-如果有多个格式适合呢?你会选第一个吗?最后一个?我刚刚检查了我的数据库。我使用SQLCE,其中我使用日期单元格的“datetime”格式。从stackoverflow的另一篇文章中,我读到它是“dd-MM-yyy-HH:MM:ss.fff”。如果超过1个适合,我就买第一个。或者我会选择我粘贴在这里的模式所接受的模式。@Pete最好的方法是限制用户以特定格式输入日期。有很多方法-日期时间选择器,输入掩码等。嘿,伙计,谢谢你的意见。在某种程度上你是对的,但在我的例子中,日期将从excel文件导入。也许在Excel本身的某个地方存储了一个文化信息?@Pete:对不起,我不是说Excel:(@Binary-2001年1月2日怎么可能是1月1日?2月2日怎么可能是2月2日?可能是打字错误?是的,打字错误,2月1日或1月2日:)嘿,伙计,谢谢你的意见。在某种程度上你是对的,但在我的例子中,日期将从excel文件导入。也许在Excel里