Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 4
1

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

02.11.2010, 22:09. Показов 3597. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Было тестовое задание на собеседовании. Я не справился, правильное решение мне не сказали.
Задача такова:

1 days ago
1 November 2010
11.1.2010

Дана строка. она может быть любой из трёх выше. нужно написать код, который будет преобразовывать строку в DateTime (формат - USA). если сделать всё правильно, то значения всех трёх строк в DateTime будут одинаковы.

Я предоставил такой вариант:

C#
1
2
3
4
5
6
7
8
9
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", то всё равно должно работать.

Каким образом это делается?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2010, 22:09
Ответы с готовыми решениями:

Несоответствие формата даты System.DateTime и DATETIME в SQL Express Edition
Столкнулся с такой проблемой: В System.DateTime дата пишется в формате дд.мм.гггг чч.мм.сс, а...

Конвертация «time_unix» в «datetime» стандартного формата
Какой командой в PHPmyAdmin (на удаленном сервере MySQL) можно преобразовать множество дат типа...

DateTime выбор нужного формата даты
Доброго времени суток. подскажите, как можно взять значение поля DateTime в нужном формате? ...

Конвертирование DateTime в String нужного формата и обратно
Доброго времени суток! Приведенный ниже код коннектится к БД и записывает данные, полученные по...

10
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.11.2010, 23:07 2
в общем, ни мой многолетний опыт работы на .NET, ни 1 час поиска в интернете + sscli встроенного в FCL парсера "1 day ago" дать не могут. в инете только готовые решения есть... конечно, может быть в .NET 4 что-то и есть, но я в этом оочень сильно сомневаюсь. в общем, предлагаю радоваться, что не посчастливилось работать в компании, в которой, даже на собеседовании происходит такой идиотизм...

Не по теме:

если бы метод парсинга там и был, меньшим идиотизмом это не стало бы... бежать надо от таких людей

0
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 4
02.11.2010, 23:27  [ТС] 3
Можно попробовать извлечь колво дней(минут, месяцев и т.д.) используя строку форматов.

C#
1
2
3
4
5
string[] formats = { "d 'days ago'", "M 'months ago'", "H 'hours ago'", "m 'minutes ago'"};
if (DateTime.TryParseExact(str, formats, new CultureInfo("en-US"), DateTimeStyles.AllowWhiteSpaces, out date))
{
     // тут код который отнимает колво дней(месяцев и тд.) от текуйщей даты
}
Вот только как организовать отнимание полученного значения из текущей даты. Ведь если скажем мы напишем "5 days ago", то date будет иметь значение 05.01.2010. Надо както через Substract, но у меня не выходит
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
03.11.2010, 00:33 4
да уж странно, среди 133 форматов
C#
1
2
            CultureInfo us = CultureInfo.CreateSpecificCulture("en-US");
            string[] formats = (DateTime.Today - TimeSpan.FromDays(1)).GetDateTimeFormats(us);
никаких "1 days ago" нету даже близко

Добавлено через 1 час 4 минуты
вообще вроде чего-то получилось )
правда на 4 дотнете
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            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;
                }
            }
1
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 4
03.11.2010, 00:41  [ТС] 5
Спасибо. Уже прочитал на мсдн про TrySpanExact. Щас скачаю новую студию попробую.
0
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
03.11.2010, 04:50 6
m0nax, не надо на человека нирвану после боя наводить. не работает - и не работает. вопрос был больше сердечным: они козлы? : да, они козлы!
тем более, что вариант кода далеко не так универсален, как прописано в головном посте

Azz, они козлы. и знание одной грёбаной перегрузки одного грёбаного метода из последней версии платформы никого не спасет
0
nio
03.11.2010, 08:26
  #7

Не по теме:

Azz, полностью согласен с Mikant. Скорее всего была попытка создать видимость отбора претендентов, на самом деле нужный человек уже был известен до собеседования. Ему "попалось" какое-нибудь преобразование из int в string, а остальные получили завальные задачи. Даже если бы ты это решил, скорее всего тебе бы вежливо ответили, что твоя кондидатура подходит, но не сейчас, и "они" позвонят, когда будет след. набор.... Я уже 2 раза в такой передлке побывал, собеседование выигрывали люди, которые даже цикл построить не могли :(

0
0 / 0 / 0
Регистрация: 02.11.2010
Сообщений: 4
03.11.2010, 12:45  [ТС] 8
Ребят, всем большое спасибо, но я то не из-за собеседования беспокоился) Мне реально был интересен способ решения задачи)

А по поводу веселых собеседований - в прошлую пятницу проходил собеседование на .NET проггера. Два дня до него теорию повторяла(ООП паттерны, создание многопоточек, делегаты, коллекции и еще дофига всего). Пришел туда - мне выдали десять функций на С++ и предложили одним предложением выразить, что именно функция делает.
0
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
03.11.2010, 13:01 9
Цитата Сообщение от Azz Посмотреть сообщение
Мне реально был интересен способ решения задачи)
http://www.robfe.com/2009/09/timeago-for-csharp/
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
18.11.2010, 19:15 10
внезапно у самого возник вопрос как получить дату в определенном формате
например стандарт RFC 822, выглядит как "Tue, 10 Jun 2003 09:41:01 GMT"

в списке форматов он есть, тобишь он поддерживается DateTime по умолчанию

как из имеющегося DateTime.Now получить строку такой даты с минимальным кол-вом телодвижений?
0
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
18.11.2010, 19:46 11
Цитата Сообщение от m0nax
внезапно у самого возник вопрос как получить дату в определенном формате
например стандарт RFC 822, выглядит как "Tue, 10 Jun 2003 09:41:01 GMT"

в списке форматов он есть, тобишь он поддерживается DateTime по умолчанию

как из имеющегося DateTime.Now получить строку такой даты с минимальным кол-вом телодвижений?
Это RFC1123
DateTime.Now.ToString("R");
1
18.11.2010, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2010, 19:46
Помогаю со студенческими работами здесь

Строки преобразовывать в процедуре...
В исходном тексте из n строк много лишних пробелов между словами. Нужно преобразовать данный текст,...

При десериализации объекта типа DateTime с формата json происходит смещение на один день назад
Перед применением сохранения даты в файл используя ...

Как установить в компьютере системное время и дату не из строки, а из переменной DateTime?
Всем здравствуйте. Установить в компьютере системное время и дату можно с помощью TimeString и...

Напишите программу, которая будет преобразовывать регистр строк в зависимости от параметров комадной строки
Напишите программу, которая, если в командной строке задана опция -u, будет преобразовывать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru