[C#] C #에서 DateTime의 유효성을 검사하는 방법은 무엇입니까?

나는이 솔루션을 생각 해낸 유일한 사람이 아닌 것 같지만 더 나은 솔루션이 있다면 여기에 게시하십시오. 이 질문을 여기에 남겨두고 나와 다른 사람들이 나중에 검색 할 수 있도록하고 싶습니다.

텍스트 상자에 유효한 날짜가 입력되었는지 확인해야했는데 이것이 제가 생각 해낸 코드입니다. 포커스가 텍스트 상자를 벗어날 때 이것을 실행합니다.

try
{
    DateTime.Parse(startDateTextBox.Text);
}
catch
{
    startDateTextBox.Text = DateTime.Today.ToShortDateString();
}



답변

DateTime.TryParse

이것은 더 빠르다고 믿으며 추악한 시도 / 잡기를 사용할 필요가 없음을 의미합니다. 🙂

예 :

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
  // Yay :)
}
else
{
  // Aww.. :(
}


답변

흐름 제어에 예외를 사용하지 마십시오. DateTime.TryParseDateTime.TryParseExact를 사용하십시오 . 개인적으로 특정 형식의 TryParseExact를 선호하지만 TryParse가 더 나은 경우가있을 수 있습니다. 원래 코드를 기반으로 한 사용 예 :

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
    startDateTextox.Text = DateTime.Today.ToShortDateString();
}

이 접근 방식을 선호하는 이유 :

  • 보다 명확한 코드 (하고 싶은 작업이 표시됨)
  • 예외 포착 및 삼키는 것보다 더 나은 성능
  • 예를 들어 OutOfMemoryException, ThreadInterruptedException과 같이 예외를 부적절하게 포착하지 않습니다. (관련 예외를 포착하여이를 방지하기 위해 현재 코드를 수정할 수 있지만 TryParse를 사용하는 것이 여전히 좋습니다.)

답변

다음은 문자열을 DateTime형식 으로 변환 할 수 있으면 true를 반환 하고 그렇지 않으면 false 를 반환하는 솔루션의 또 다른 변형입니다 .

public static bool IsDateTime(string txtDate)
{
    DateTime tempDate;
    return DateTime.TryParse(txtDate, out tempDate);
}


답변

DateTime.TryParse () 메서드를 사용합니다 : http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx


답변

TryParse 를 사용하는 것은 어떻습니까?


답변

사용시 문제 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;
            }
        }

    }


답변

    protected bool ValidateBirthday(String date)
    {
        DateTime Temp;

        if (DateTime.TryParse(date, out Temp) == true &&
      Temp.Hour == 0 &&
      Temp.Minute == 0 &&
      Temp.Second == 0 &&
      Temp.Millisecond == 0 &&
      Temp > DateTime.MinValue)
            return true;
        else
            return false;
    }

// 입력 문자열이 짧은 날짜 형식이라고 가정합니다.
예를 들어 “2013/7/5″는 true를 반환하거나
“2013/2/31″은 false를 반환합니다.
http://forums.asp.net/t/1250332.aspx/1

// bool booleanValue = ValidateBirthday ( “12:55”); 거짓을 반환