Một vấn đề với việc sử dụng DateTime.TryParse
là nó không hỗ trợ trường hợp sử dụng nhập dữ liệu rất phổ biến của ngày được nhập mà không có dấu phân tách, ví dụ 011508
.
Đây là một ví dụ về cách hỗ trợ điều này. (Đây là từ một khuôn khổ mà tôi đang xây dựng, vì vậy chữ ký của nó hơi kỳ lạ, nhưng logic cốt lõi sẽ có thể sử dụng được):
private static readonly Regex ShortDate = new Regex(@"^\d{6}$");
private static readonly Regex LongDate = new Regex(@"^\d{8}$");
public object Parse(object value, out string message)
{
msg = null;
string s = value.ToString().Trim();
if (s.Trim() == "")
{
return null;
}
else
{
if (ShortDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 2);
}
if (LongDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 4);
}
DateTime d = DateTime.MinValue;
if (DateTime.TryParse(s, out d))
{
return d;
}
else
{
message = String.Format("\"{0}\" is not a valid date.", s);
return null;
}
}
}