преобразуйте строку в формат даты

Выезд WebGoat. Это - приложение, пронизанное уязвимостями от список OWASP, разработанный как ресурс изучения для разработчиков веб-приложения. Приложение является учебным руководством, которое обходит разработчиков через уязвимости, которые оно содержит с тестами для каждого урока.

5
задан raklos 14 October 2009 в 16:29
поделиться

4 ответа

Разработайте два нужных формата, а затем используйте:

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);
    }
}
12
ответ дан 18 December 2019 в 13:16
поделиться
string s =  String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));
0
ответ дан 18 December 2019 в 13:16
поделиться

Это довольно хорошие решения, но если вы передадите что-то, что не соответствует шаблону, они выбрасывают исключения. Мне нравится использовать класс 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);
0
ответ дан 18 December 2019 в 13:16
поделиться

Если ваша строка является допустимым форматом даты и времени, который может понять .Net, все, что вам нужно, это:

   DateTime.Parse(yourString).ToString("yyyyMMdd")

ИЗМЕНИТЬ: Многие разумные форматы даты и времени понятны для .Net без явной спецификации формата, но если ваш конкретный - нет, вам нужно будет использовать явный спецификатор формата.

   DateTime.ParseExact(yourString, format, 
         CultureInfo.InvariantCulture)).ToString("yyyyMMdd")
2
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: