输入值=" 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
答案 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
}
然而,(然而,这是一个很大的问题),你可以得到输入在多种文化中有效的情况,你可能会得到错误的结果。