Използване на ParseExact(str, format), AddDays(count) и ToString(format)
Здравейте можете ли да ми обясните как се използват тези методи.Става въпрос за следната задача : Пресмятане с дати: 1000 дни на Земята
Здравейте можете ли да ми обясните как се използват тези методи.Става въпрос за следната задача : Пресмятане с дати: 1000 дни на Земята
ParseExact(str, format):
Първият параметър e стрингът, от който искаш трансформираш в DateTime, а вторият задава формата, който се очаква (напр. "yyMMdd hhmmss"). Впрочем мисля, че има и трети параметър за културата...
Идеята на метода е, че очакваш точно определен формат на датата, който е различен от стандартните формати(можеш да ги провериш в MSDN).
AddDays(count):
Добавяш стойност, отговаряща на брой дни към текущата дата.
ToString(format):
Преобразува DateTime в стринг, като при това се задава точния формат (напр. "MM/dd/yyyy HH:mm:ss.fff"). Мисля, че има overload-нат метод, който да приема като параметър културата.
Препоръчвам ти да прегледаш стандартните формати на DateTime в MSDN.
Пример:
string dateStr = "11112002";
DateTimе date = DateTime.ParseExact(dateStr, "yyyyddMM", CultureInfo.InvariantCulture);
Console.WriteLine(date.ToString("dd.MM.yyyy")); // 20.02.1111 в конзолата
Документацията на тези методи прочете ли? Ако да, какво не ти стана ясно? Ако не си, хубаво е първо там да започнеш.
Понякога документацията е малко тегава за новаци, особено MSDN.
Като използвам ParseExact при въвеждане на третия параметър(култура) CultureInfo не ми го отчита като параметър, веднага го подчертава като грешка.А до колкото разбрах чрез ParseExact се определя формата на датата .
Трябва да добавиш глобализация, за да можеш да използваш метода DateTime:
using System;
using System.Globalization;
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
DateTime date = DateTime.ParseExact(input, "ddMMyyyy", CultureInfo.InvariantCulture);
}
}
А случайно да имаш проблем с отговора? На мен Judge винаги ми връща като отговор един ден по-рано.
Нужно ли е допълнително настройване за времеви зони?
Ами пробва ли вместо AddDays(1000) просто да му зададеш AddDays(999)
Как мислиш? :) Аз и така си изкарах точките естествено, понеже няколко онлайн калкулатора ми дават същият отговор, който кодът ми връща с 1000 дни.
Просто ми е интересно дали грешката е в някакви неявни настройки или в тестовете, които ползва Judge системата.
Здравейте и от мен. И при мен се получава същото нещо с AddDays(1000), но с 999 се получава и сичко е ОК.
Здравейте,
Нещо не се получават отговорите, ето го и моя код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var inDate = Console.ReadLine();
var outDate = DateTime.ParseExact(inDate, "dd-mm-yyyy", null);
outDate = outDate.AddDays(999);
Console.WriteLine(outDate.ToString("dd-mm-yyyy"));
}
}
}
Като "контролната" дата дадена в упражението (25-02-1995) получавам 20-02-1997 г., което са 726 дни (или 2 години точно).
Отговота който трябва да получа на изхода е 20-11-1997.
Не разбирам защо изкарава този резултат.
Ако може някой да разясни къде бъркам, ще съм благодарен? :)
Промени си mm на MM и си готов ;)
mm - минути (00 до 59)
MM - месеци ( 1 до 12 )
Благодаря :) (ще трябва да прегледам форматирането пак) :)
Edit: Коригирах и дните на 1000 (това е работещо решение)
Би трябвало с 999 да ти даде коректен отговор!
А как, да вземем дата, която въвежда потребителя ?
Ами запазваш в стринг променлива прочетеното от конзолата:
string dateStr = Console.ReadLine();
И после си я преобразуваш в DateTime с Parse(), TryParse() или ParseExact();
Може и директно като параметър в метода:
DateTime dt = DateTime.Parse(Console.ReadLine());
Благодаря !