Как в C# преобразовывать строки формата '1 days ago' в DateTime?

Узнай цену своей работы

Формулировка задачи:

Было тестовое задание на собеседовании. Я не справился, правильное решение мне не сказали. Задача такова: 1 days ago 1 November 2010 11.1.2010 Дана строка. она может быть любой из трёх выше. нужно написать код, который будет преобразовывать строку в DateTime (формат - USA). если сделать всё правильно, то значения всех трёх строк в DateTime будут одинаковы. Я предоставил такой вариант:
CultureInfo us = CultureInfo.CreateSpecificCulture("en-US");
string str; 
DateTime date;
str = Console.ReadLine();
if(str.IndexOf("days ago")!=(-1)){
  string str1 = str.Remove(str.IndexOf("days ago"));
  date = DateTime.Today.AddDays(Convert.ToDouble(str1)*-1);
 }
 else{date = DateTime.Parse(str, us);}
Мне сказали, что строка должна парситься без каких-либо дополнительных преобразований. всё должен уметь делать DateTime. К примеру, если сделать всё правильно, и запустить со строкой "10 minutes ago", то всё равно должно работать. Каким образом это делается?

Решение задачи: «Как в C# преобразовывать строки формата '1 days ago' в DateTime?»

textual
Листинг программы
            CultureInfo culture = new CultureInfo("en-US");
 
            string str = @"1 days ago";
            
            string[] formats = { @"d' days ago'", "M' months ago'", "H' hours ago'", "m' minutes ago'" };
            
            TimeSpan span;
            DateTime date;
 
            if (!DateTime.TryParse(str, out date))
            {
                if (TimeSpan.TryParseExact(str, formats, culture, TimeSpanStyles.AssumeNegative, out span))
                {
                    date = DateTime.Now + span;
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы