我正在使用date.parse函数格式化文本框中的日期输入。 但是,如果我输入未来日期,则日期解析功能失败。 为什么会这样? 我需要格式化日期并输入未来日期。
If IsDate(TransactionDate.Text) Then
TransactionDate.Text = Date.Parse(TransactionDate.Text)
Else
MsgBox("Enter correct Transaction date")
TransactionDate.Focus()
End If
答案 0 :(得分:0)
实际上,我怀疑它没有。我怀疑它实际上已经解析为2013年12月5日,当时你的意思是2013年5月12日。我使用了12/5/2013,它工作正常。
似乎它试图将其解析为MM / dd / yyyy的格式,而你的意思是dd / MM / yyyy。
这可能是因为您使用的主题是在美国文化中。例如。
我建议您使用DateTime.TryParseExact
:
CultureInfo.InvariantCulture
指定要用于解析的文化。您可以使用null
来表示“当前正在执行的线程的文化”,但为了便于阅读,我个人会明确说明这一点DateTime.ParseExact
代替它是有意义的,因为这将引发异常。基本上你需要找出你想要做的错误。答案 1 :(得分:0)
您需要指定数据字符串所需的格式。日期可以用多种格式书写 - 美国(mm / dd / yyyy)或欧洲(dd / mm / yyyy),两位数年份(yy) )或四位数年(yyyy),不同的分隔符(/
)vs(-
)等等。名单是无止境的。
您需要明确说明您期望的日期或编写代码以尝试各种格式并应对不正确的输入。
后一种方法的危险在于日期可能含糊不清 - 是2月1日或1月2日的“1/2/2013”?
使用带有IFormatProvider
的{{3}}重载,如果失败则报告错误。
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
答案 2 :(得分:0)
使用DateTime.ParseExact并传递格式并提供。
dateString = "13/05/2013";
format = "dd-MM-yyyy";
CultureInfo provider = CultureInfo.InvariantCulture;
var result = DateTime.ParseExact(dateString, format, provider);