[C#] Домашно Strings and Text Processing - 16 задача


5

Условие: 16.Write a program that reads two dates in the format: day.month.year and calculates the number of days between them.Example:

Enter the first date: 27.02.2006
Enter the second date: 3.03.2006
Distance: 4 days

Решениеsource.

Обяснение: Използваме готовия метод DateTime.Parse(), след което изваждаме датите и намираме броя на дните в този интервал.




Отговори



0

Здравей,

По някаква причина кода ти хвърля ексепшън (не бил валиден формата на датата). Аз решавам задачата по същия начин, но пък смята грешно и все още не мога да разбера защо..

Ето и моето решение:

 

static void Main()
        {
            Console.WriteLine("Please enter a date in the format:day.month.year");
            string firstDate = Console.ReadLine();
            Console.WriteLine("Please enter a date in the format:day.month.year");
            string secondDate = Console.ReadLine();
            var numberOfDays = (DateTime.Parse(secondDate) - DateTime.Parse(firstDate)).TotalDays;
            Console.WriteLine("The difference between given dates is:{0} days",numberOfDays);
        }

от Tsanko (139 точки)


0
Аз не можах да се преборя с културите . Когато сложа инвариантна, хвърля изключение. Затова я махнах. Ако ползвам както е в презентацията Parse Exact не смята вярно. Да не е от културата или от Parse-a?


0
http://pastebin.com/4RVNDMze Виж как можеш да видиш възможните "DateTime" формати за текущата култура. Ако е българска, би трябвало първите формати да са от типа: d.M.yyyy .... т.е. не би трябвало да се хвърля изключение.
Edit: Това е при положение, че ползваш DateTime.Parse

от Stefanpu (404 точки)



0

Ползвам регулярни изрази (за да взема да ги науча) и с тях проверявам дали датата е въведена правилно.

 "[0-9]{1,2}[.][0-9]{2,}[.][0-9]{4,}" означава (да ме поправят по-знаещите ако греша)

От една до две цифри от 0-9, следвани от точка, следвани от две цифри от 0-9, следвани от точка, следвани от 4 цифри от 0-9.

Превръщам дните от DateTime в int (cast) и печатам на конзолата).

http://pastebin.com/rkT8UzfW




0
Трябва само да махнеш ',' в {2,} и в {4,}, защото в момента означава "поне 2 и поне 4". Т.е. ако някой въведе 6 числа за месец или 10 числа за година, ще ги приеме. Ако искаш точен брой срещания ползвай {2} и {4}, но в случая е по- удачно {1,2} и {1, 4}.

от Anubis_Black (1521 точки)


0

Решение с метод за Parse-ване на датите като независещи от културата и в съотвено искания от мен формат + малко Exception handling.

http://pastebin.com/A61FEPaH


от sylviapsh (302 точки)


0

същото като примера от книгата - http://pastebin.com/hq1rHnVx

 

http://www.introprogramming.info/intro-csharp-book/read-online/glava13-simvolni-nizove/ - Преобразуване към дата


от ge_or_gi (110 точки)


2

http://pastebin.com/Lzw8v1r9

Направих възможно най-тромавото решение , но това ми дойде първо наум. Навсякъде парсвате в готов формат dd.MM.YYYY, гледате за култури.... В условието пише че датата ще е във формат ден.месец.година, без значение дали ще има или няма водещи нули. Като подам на някоя от горните програми 3.3.2000 , и тя не знае какво да го прави това , защото очаква 03.03.2000.

Чета два низа от конзолата, разцепвам ги с разделител '.'

Създавам си две променливи от тип DateTime, като им подавам парснатите към int поднизове от входа, и после ги изваждам.

работи и за 3.03.2006 и за 03.3.2006


от pdrenovska (2196 точки)


4

Решение

Чета ги като стрингове и ако всичко е наред със split взимам стойностите на д/м/г и създавам две структури DateTime и с TimeSpan намирам дните между тях.


от Rokata (397 точки)


1
Здравейте, ето тук може да видите и моя вариянт на решението на тази задача, като аз използвах вградения в .Net class System.TimeSpan, като тя извежда и минутите разлика между двете дати. http://pastebin.com/c7JtFAcF

от Plamen.Minkov (216 точки)


0

Решение: source

Използвам  DateTime.ParseExact за да укажа формата за въвеждане. Изваждам двете данни и със свойството Days извличам дните.


от stanchev (197 точки)


8
Колеги имам върпос относно примера в презентацията:
Enter the first date: 27.02.2006
Enter the second date: 3.03.2004 Distance: 4 days
Разликата в дните трябва да е 726 дни, а не 4 или аз съм в грешка ?

от teleriknetwork (2734 точки)


0
И аз това се питах ...


0
Да и аз това забелязах първо. Мисля, че трябва да смята пълната разлика заедно с годините (а не само от дата до дата все едно игнорира годината).

от Vazzzz (1380 точки)



0

GitHub

Ръчно си сплитвам по '.' и си парсвам двете дати. После чрез .TotalDays намирам дните между двете дати.


от dzhenko (3893 точки)