字符串无法识别有效日期时间

时间:2016-08-17 10:50:34

标签: .net vb.net datetime-format cultureinfo

输入值=" 3:10 PM"或" 15:10"取决于控制面板中的区域设置。 当设置为印度时,输入值为" 15:10"当设置为US时,输入值为" 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

1 个答案:

答案 0 :(得分:0)

如果您输入的内容可能因文化而异,则您无法使用以下行来解析字符串:

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

因为你有一个固定的格式,而且你正在指定一种不变的文化。

如果输入可能无效,则应捕获异常并显示相应的错误消息,或使用TryParseExact并在返回false时显示相应的错误消息。

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

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

然而,(然而,这是一个很大的问题),你可以得到输入在多种文化中有效的情况,你可能会得到错误的结果。