Лучший способ получить дату с .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
, которые принимают строки формата даты и времени (стандарт или пользовательский) при попытке проанализировать строку даты.
Ответ 2
Как насчет DateTime.TryParse и DateTime.TryParseExact
Первый использует текущий формат даты культуры.
Ответ 3
.NET дает нам datetime.parse
http://msdn.microsoft.com/en-us/library/1k1skd40.aspx
и a datetime.tryparse
http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx
которые оба являются хорошим способом синтаксического анализа дат из строк
Ответ 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;
}
}