Лучший способ получить дату с .NET?

Я получаю строку обратно с моей страницы, и я хочу убедиться, что это дата. Это то, что у меня есть до сих пор (это работает), и я просто хочу знать, является ли это "лучшим" способом сделать это. Я использую .NET 4.

int TheMonth =0;
int TheDay = 0;
int TheYear = 0;
DateTime NewDate;

var TheIncomingParam = Request.Params.Get("__EVENTARGUMENT").ToString();

char[] TheBreak = { '/' };
string[] TheOutput = TheIncomingParam.Split(TheBreak);

try { TheMonth = Convert.ToInt32(TheOutput[0]); }
catch { }

try { TheDay = Convert.ToInt32(TheOutput[1]); }
catch { }

try { TheYear = Convert.ToInt32(TheOutput[2]); }
catch { }

if (TheMonth!=0 && TheDay!=0 && TheYear!=0)
{
        try { NewDate = new DateTime(TheYear, TheMonth, TheDay); }
        catch { var NoDate = true; }
}

Ответ 1

Используйте один из методов Parse, определенных в структуре DateTime.

Они выдадут исключение, если строка не обрабатывается, поэтому вы можете вместо этого использовать один из TryParse (not как симпатичные - они требуют параметра out, но более безопасны):

DateTime myDate;
if(DateTime.TryParse(dateString, 
                  CultureInfo.InvariantCulture, 
                  DateTimeStyles.None, 
                  out myDate))
{
   // Use myDate here, since it parsed successfully
}

Если вы знаете точный формат прошедшей даты, вы можете попробовать использовать ParseExact или TryParseExact, которые принимают строки формата даты и времени (стандарт или пользовательский) при попытке проанализировать строку даты.

Ответ 4

Для URL: используя date iso formate (YYYYMMDD)

Для преобразования:

datetime.TryParse as suggested above

Ответ 5

Я бы просто TryParse входную строку:

    private bool ParseDateString()
    {
        var theIncomingParam = Request.Params.Get("__EVENTARGUMENT").ToString(); 

        DateTime myDate;

        if (DateTime.TryParse(theIncomingParam, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate))
        {
            int TheMonth = myDate.Month;
            int TheDay = myDate.Day;
            int TheYear = myDate.Year;

            // TODO: further processing of the values just read

            return true;
        }
        else
        {
            return false;
        }
    }