ปัญหาในการใช้งานDateTime.TryParse
คือไม่รองรับกรณีการใช้งานการป้อนข้อมูลทั่วไปของวันที่ที่ป้อนโดยไม่มีตัวคั่นเช่น011508
ก็คือว่ามันไม่สนับสนุนกรณีที่ใช้การป้อนข้อมูลที่พบบ่อยมากวันที่เข้ามาโดยไม่ต้องแยกเช่น
นี่คือตัวอย่างวิธีการสนับสนุนนี้ (นี่มาจากกรอบที่ฉันกำลังสร้างดังนั้นลายเซ็นของมันจึงค่อนข้างแปลก แต่ตรรกะหลักควรใช้งานได้):
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;
}
}
}