Выезд WebGoat. Это - приложение, пронизанное уязвимостями от список OWASP, разработанный как ресурс изучения для разработчиков веб-приложения. Приложение является учебным руководством, которое обходит разработчиков через уязвимости, которые оно содержит с тестами для каждого урока.
Разработайте два нужных формата, а затем используйте:
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Например:
using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string input = "10/13/2009 12:00:00 AM";
string inputFormat = "MM/dd/yyyy HH:mm:ss tt";
string outputFormat = "yyyyMMdd";
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Console.WriteLine(output);
}
}
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));
Это довольно хорошие решения, но если вы передадите что-то, что не соответствует шаблону, они выбрасывают исключения. Мне нравится использовать класс SmartDate из CSLA, http://www.lhotka.net/cslanet/download.aspx , лично. Он прекрасно справляется с нулевыми и недопустимыми значениями. В функции TryStringToDate происходит волшебство:
private static bool TryStringToDate( string value, EmptyValue emptyValue, ref DateTime result )
{
DateTime tmp;
if( String.IsNullOrEmpty( value ) )
{
if( emptyValue == EmptyValue.MinDate )
{
result = DateTime.MinValue;
return true;
}
result = DateTime.MaxValue;
return true;
}
if( DateTime.TryParse( value, out tmp ) )
{
result = tmp;
return true;
}
string ldate = value.Trim().ToLower();
if( ldate == "SmartDateT" ||
ldate == "SmartDateToday" ||
ldate == "." )
{
result = DateTime.Now;
return true;
}
if( ldate == "SmartDateY" ||
ldate == "SmartDateYesterday" ||
ldate == "-" )
{
result = DateTime.Now.AddDays( -1 );
return true;
}
if( ldate == "SmartDateTom" ||
ldate == "SmartDateTomorrow" ||
ldate == "+" )
{
result = DateTime.Now.AddDays( 1 );
return true;
}
return false;
}
Итак, в конечном итоге вы должны получить что-то вроде этого:
SmartDate dt = new SmartDate(input);
dt.FormatString = outputFormat;
string output = dt.Text;
Console.WriteLine(output);
Если ваша строка является допустимым форматом даты и времени, который может понять .Net, все, что вам нужно, это:
DateTime.Parse(yourString).ToString("yyyyMMdd")
ИЗМЕНИТЬ: Многие разумные форматы даты и времени понятны для .Net без явной спецификации формата, но если ваш конкретный - нет, вам нужно будет использовать явный спецификатор формата.
DateTime.ParseExact(yourString, format,
CultureInfo.InvariantCulture)).ToString("yyyyMMdd")