Date.parse函数错误
问题描述:
我正在使用date.parse函数格式化文本框中的日期输入。 但是,如果我输入将来的日期日期解析功能失败。 这是为什么? 我需要格式化日期并输入将来的日期。Date.parse函数错误
If IsDate(TransactionDate.Text) Then
TransactionDate.Text = Date.Parse(TransactionDate.Text)
Else
MsgBox("Enter correct Transaction date")
TransactionDate.Focus()
End If
答
我用2013年12月5日,它工作得很好。
我怀疑它没有,实际上。我怀疑它实际上解析为2013年12月5日,当你的意思是2013年5月12日。
它似乎试图解析它作为MM/dd/yyyy的格式,而你的意思是dd/MM/yyyy。
这可能是因为您使用的线程在美国文化中。
我建议你使用DateTime.TryParseExact
:
- 如果要指定精确的格式,你可以做到这一点使用custom date/time format pattern
- 如果你想允许.NET使用恰当的格式为文化,您可以使用standard date/time format pattern
- 指定要用于解析的区域性,如果要解析机器生成的文本,请使用
CultureInfo.InvariantCulture
。您可以使用null
表示“当前执行的线程的文化”,但我个人倒作出这样的明确,为便于阅读 - 使用返回值来确定分析是否失败。如果这表明某个地方有bug,那么使用
DateTime.ParseExact
代替它会很有意义,因为这会引发异常。基本上你需要弄清楚你想要做什么错误。
答
您需要指定您期待数据字符串的格式。日期可以以多种格式写入 - 美国(mm/dd/yyyy)或欧洲(dd/mm/yyyy),两位数年(yy)或四位数年(yyyy),不同分隔符(/
)与(-
)等。名单是无止境的。
您或者需要明确指出您期望的日期,或者编写代码以尝试各种格式并处理不正确的输入。
后一种方法的危险是日期可能不明确 - “1/2/2013”是2月1日还是1月2日?
使用Date.TryParse
的过载,该过载需要IFormatProvider
并在失败时报告错误。
dateString = "2008-03-01 10:00"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
答
使用DateTime.ParseExact并传递格式并提供。
dateString = "13/05/2013";
format = "dd-MM-yyyy";
CultureInfo provider = CultureInfo.InvariantCulture;
var result = DateTime.ParseExact(dateString, format, provider);
什么是您的示例输入?你会得到什么错误? – Steve 2013-05-12 11:10:48
你有一些你使用的数据的例子吗?它的第五十二,所以你可能会使用美国的日期格式,并得到该问题(或反之亦然) – gordatron 2013-05-12 11:11:06
(如2013年5月13日是我们的格式错误 - 如果今天是12/05/2013) – gordatron 2013-05-12 11:11:35