2011-10-14 84 views
1

简短的问题。我试图将字符串转换为Date(稍后将其放入INSERT命令)。我的问题是,我正在阅读的字符串总是不同的(没有规则它将是什么格式 - 因为这是用户相关的)。VB.NET - 任何字符串转换日期

我发现了这种计算器一段代码:

DateTime myDate = 
    DateTime.ParseExact("2009-05-08 14:40:52,531", 
         "yyyy-MM-dd HH:mm:ss,fff", 
         System.Globalization.CultureInfo.InvariantCulture) 

但对我来说,它不会工作,因为我不知道我要进口什么样的格式做。 有没有检查所有已知格式的通用导入函数?如果现在我该怎么写呢? (请给我一些提示)。

感谢任何技巧和提示提前, 皮特

+2

我不确定通用功能是否可行。例如2011年5月3日5月3日或3月5日?取决于你住在哪儿。另外,您可能需要缩小您支持的格式。例如,您是否希望它能够将“明天”转换为有效日期? – JohnFx

+2

问题是,'2009-05-08'可能是'yyyy-MM-dd'或'yyyy-dd-MM' - 没有额外的信息,您不能明确地将该字符串转换为日期... –

+1

或,更糟的是:'05/06/07'。什么是年,月,日?我知道如何通常在我的世界范围内阅读这些内容,但是对于可能至少有4个不同日期的格式缺乏更严格的规则。 –

回答

0

不,这是不可能的,但是你可以在一个数组定义可能formats并将它传递给ParseExactTryParseExact方法。

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)) 
+0

如果我将所有格式都放在格式()中,然后在循环中进行测试并且它们中没有一个适合 - 是否抛出异常,是否合理? – Pete

+0

@Pete - 如果不止一种格式适合?你只是拿第一个呢?最后一个? –

+0

就在现在我检查了我的数据库。我使用SQLCE,使用日期单元格的“datetime”格式。从另一篇文章中,我已经读到它是“dd-MM-yyyy HH:mm:ss.fff”。如果超过1个,我会拿第一个。或者我会采取那种我会在这里粘贴的模式。 – Pete

1

如果您没有(或不能)验证日期为用户输入它(以确保它是一个有效的日期),那么你有点拧。

考虑到当地人,1/2/2011可能是2月1日(爱尔兰,英国&欧洲),或可能是1月2日(美国)。

即使忽略当地人可能会变得毛茸茸的,有人在“星期四13/10/11”,第13星期四罚款,如果他们错了,并在“星期五13/10/11”,或他们只是把星期五10/11,是今天(2011年10月14日星期五)或2011年11月的一些星期五。

然后你得到直观的用户输入“下周四”,理论上你也可以处理您?

然后你得到错别字,112 // 2011,是11/2/2011还是1/12/2011?

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

+0

嘿,队友,感谢您的意见。你在某种程度上是正确的,但在我的情况下,日期将从Excel文件导入。也许在Excel本身有一个文化信息存储的地方? – Pete

+0

@Pete:对不起,我不会说Excelie :( –

+0

@Binary - 怎么会1/2/2001是1月1日?怎么会是2月2日?错别字? –

相关问题