2016-08-17 88 views
0

输入值=“3:10 PM”或“15:10”取决于控制面板中的区域设置。 设置为印度时输入值为“15:10”,当设置为美国输入值时为“3:10 PM”。我必须每次都将输入值转换为“1899-12-30 15:10:00.000”,以便在解析其显示错误时“字符串未被识别为有效日期时间”。字符串未被识别有效日期时间

Private Function GetCurrentTime(ByVal value As String) As DateTime 
     Dim oaDate As DateTime 
     Dim timeValue As DateTime 

     oaDate = DateTime.FromOADate(0) 
     value = String.Concat(oaDate.Year, oaDate.Month, oaDate.Day, value) 
     timeValue = DateTime.ParseExact(value, "yyyyMMddHH:mm", Globalization.CultureInfo.InvariantCulture) 
     Return timeValue 

    End Function 
+0

在MSDN上尝试这篇文章。 https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx –

回答

0

如果你是取决于文化,那么你不能使用以下行来解析字符串输入可以是不同的:

timeValue = DateTime.ParseExact(value, "yyyyMMddHH:mm", Globalization.CultureInfo.InvariantCulture) 

因为你已经有了一个固定的格式和你正在指定一个不变的文化。

如果输入可能无效,您应该捕获异常并显示合适的错误消息,或使用TryParseExact并显示合适的错误消息(如果返回false)。

您必须检查当前的文化,并调用您当前的代码或美国的代码,或者依次使用TryParseExact依次测试每种可能的格式,直到找到一个产生有效日期的格式。 TryParseExact有一个超载格式字符串列表,因此您可以在进行中检查。你需要像这样(道歉的C#语法):

string[] formats = {"yyyyMMddHH:mm", "yyyyMMddh:mm"}; 
DateTime result 
if (TryParseExact(value, formats, ..., out result)) 
{ 
    // use the result 
} 
else 
{ 
    // invalid input 
} 

但是,(这是一个很大的不过),你可以得到其中输入可以在一个以上的文化是有效的情况下,你最终可能会导致错误的结果。

相关问题