Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Porovnání dvou datumů v C#

Ahoj, potřebuji porovnat dva datumy. Jeden datum uložený porovnávám se současným datumem zajímá měj jen číslo dnu, takže jsem si převedl datumy do stringu a rozkládám je. Pak už jen přes if porovnám jestli dny mají stejné číslo nebo ne. Jenže když si v messageboxu nechám zobrazit ten jeden den, tak se mi otevřou tři messageboxy. Jeden s číslem dnu, další s číslem měsíce a třetí s rokem. Poradíte mi jak to opravit ?
Novák Martin

 //vypocet uloženeho data
            datumprepocet = Class1.datum;
            foreach (string dat in datumprepocet.Split('.'))
            {
                string day = (dat);
                string moon = (dat);
                string year = (dat);

                den = Convert.ToInt32(day);
                mesic = Convert.ToInt32(moon);
                rok = Convert.ToInt32(year);
            }
            // vypocet současného data
            datumted = DateTime.Now.Date.ToString("d/M/yyyy");
            foreach (string datted in datumted.Split('.'))
            {
                string day1 = (datted);
                string moon1 = (datted);
                string year1 = (datted);

                den1 = Convert.ToInt32(day1);
                mesic1 = Convert.ToInt32(moon1);
                rok1 = Convert.ToInt32(year1);
            }

            //porovnání dnu
            if (den != den1)
            {              
                dnesnilogin = false;
            }
            else
            {
                dnesnilogin = true;
            }
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
to ti aj funguje? uplne zbytocne riesis blbosti so stringom a splitom. tento riadok nahradi cele to…
wam_Spider007 23.02.2016 22:24
wam_Spider007
Tuhle metodu nás učili ve škole. Proto to to tak mám :). Teď jsem si uvědomil, ta proměnná datum je…
Olus 23.02.2016 22:46
Olus
Na to existuje DateTime.TryParse nebo DateTime.TryParseExact... ;-) var now = DateTime.Now; const s… poslední
ws79 29.02.2016 19:23
ws79
datumted = DateTime.Now.Date.ToString("d/M/yyyy"); foreach (string datted in datumted.Split('.'))… nový
MM.. 24.02.2016 13:11
MM..
Alebo este rozumnejsie string[] rozpadDatumu = datumprepocet.Split('.'); if(Convert.ToInt32(rozpadD… nový
MM.. 24.02.2016 13:19
MM..

to ti aj funguje? uplne zbytocne riesis blbosti so stringom a splitom.
tento riadok nahradi cele to co si tu napisal

bool dnesnylogin = Class1.datum.Day == DateTime.Now.Day

Preco mas 3 message boxy neviem, ten kus kodu ti tu chyba, ale tipujem, ze zas tam mas nejaky pekelny foreach

Tuhle metodu nás učili ve škole. Proto to to tak mám :). Teď jsem si uvědomil, ta proměnná datum je ve stringu, tak už to není brané jako datum ale jako text, takže tam nejde napsat .Day.
No já zkoušel co je v té proměnné "den" (jaké číslo je tam) a ono mi to otevřelo tři message boxy.
Děkuji za radu

Na to existuje DateTime.TryParse nebo DateTime.TryParseExact... ;-)

var now = DateTime.Now;
const string history = "25. 5. 1999";
const string historyEn = "1/11/1999";

DateTime historyDateTime;
DateTime historyDateTimeEn;

Console.WriteLine(DateTime.TryParse(history, out historyDateTime)
    ? $"Dnešní den: {now.Day}, historický den: {historyDateTime.Day}"
    : "Převod textu na datum se nezdařil!");


string[] formats = { "MM/dd/yyyy", "M/dd/yyyy" };
Console.WriteLine(DateTime.TryParseExact(historyEn,formats, new CultureInfo("en-US"), DateTimeStyles.None, out historyDateTimeEn)
    ? $"EN - Dnešní den: {now.Day}, historický den: {historyDateTimeEn.Day}"
    : "Převod textu na datum se nezdařil!");
datumted = DateTime.Now.Date.ToString("d/M/yyyy");
foreach (string datted in datumted.Split('.'))

prevedies si to na string s lomitkami, a snazis sa v tom najst bodku?
Programovani sa neda naucit v skole, to neni programovani ale lepeni nefunkcneho kodu, programovani znamena ze pri tom rozmyslas a pises len to co je treba. Napr.

string[] rozpadDatumu = datumprepocet.Split('.');
datumted = DateTime.Now.Date.ToString("d/M/yyyy");
string[] rozpadDatumuTed = datumted.Split('/');
if(porovnajstringy(rozpadDatumu[0], rozpadDatumuTed[0])==0) {
hura();
} else {
nehura();
}

Alebo este rozumnejsie

string[] rozpadDatumu = datumprepocet.Split('.');
if(Convert.ToInt32(rozpadDatumu[0]) == DateTime.Now.Day) {
hura()
} else {
nehura()
}

za predpokladu ze DateTime.Now.Day je integer cislo 1 - 31 (nechce sa mi to hladat na MSDN, najdi si to sam.

Zpět do poradny Odpovědět na původní otázku Nahoru