Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 15:06

Dobrý den, jak prosím udělat aby jsem mohl porovnávat dva datumy? Vypisuje mi chybu typu (string, int atd.). Jak prosím udělat správný zápis pro porovnání? Děkuji

    public static bool GetS(DateTime date)
    {
            if(date >= DateTime("03-21") && date <= DateTime("04-20"))
            return "beran";
    }

    void Button1Click(object sender, EventArgs e)
    {
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            dateTimePicker1.CustomFormat = "dd.MM.yyyy";
string n = dateTimePicker1.Text.ToString();
            label2.Text = n;
            Label2.Text = GetS(n);
    }
 
Odpovědět 10.10.2016 15:06
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Frestyle
Jan Vargovský:10.10.2016 15:59

Porovnávat je operátory <>=... můžeš, ale musel bys nastavit. Pro tenhle problém bych si ale vytáhl v té tvojí metodě GetS jen Day a Month z toho parametru date a porovnával to takhle.

public static string GetS(DateTime date)
    {
            if(date.Day >= 21 && date.Month >= 3 && date.Day <= 20 && date.Month <= 4)
                return "beran";
            ...
    }
Editováno 10.10.2016 15:59
 
Nahoru Odpovědět  +2 10.10.2016 15:59
Avatar
Frestyle
Člen
Avatar
Odpovídá na Jan Vargovský
Frestyle:10.10.2016 16:20

Ted mi podmínky pustí, ale vypisuje mi při volání funkce: Typ string nelze implicitně převést na typ System.DateTime. (CS0029)

 
Nahoru Odpovědět 10.10.2016 16:20
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 18:06

dej sem ukázku..
Takhle můžu poradit pouze DateTime.Parse

 
Nahoru Odpovědět 10.10.2016 18:06
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 18:20
void Button1Click(object sender, EventArgs e)
{
        dateTimePicker1.Format = DateTimePickerFormat.Custom;
        dateTimePicker1.CustomFormat = "dd.MM.yyyy";
        //string nar = dateTimePicker1.Text.ToString();
        //label2.Text = nar;
        DateTime.Parse datum = dateTimePicker1;
        label2.Text = GetS(datum);
}

Vypisuje chybu: System.DateTi­me.Parse(strin­g) je metoda, ale používá se jako typ. (CS0118)

 
Nahoru Odpovědět 10.10.2016 18:20
Avatar
HONZ4
Člen
Avatar
HONZ4:10.10.2016 18:28
//nesmysl: DateTime.Parse datum = dateTimePicker1;
        label2.Text = GetS(dateTimePicker1.Value);
 
Nahoru Odpovědět  +1 10.10.2016 18:28
Avatar
HONZ4
Člen
Avatar
HONZ4:10.10.2016 18:37

tady máš příklad použití DateTime.Parse:

private void button2_Click(object sender, EventArgs e)
        {
            try
            {
              //pokus zjistit datum z textu textboxu:
              dateTimePicker1.Value = DateTime.Parse(textBox1.Text);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "Zadání je na prd!", MessageBoxButtons.OK);
            }
        }
Editováno 10.10.2016 18:39
 
Nahoru Odpovědět 10.10.2016 18:37
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 18:40

Jako funkční řešení to bylo.

//DateTime datum = DateTime.Parse(nar);
//label2.Text = GetSvatky(datum);

Tvoje je rychlejší. Teď už se dostanu do funkce, ale podmínky složený podle rady nefungujou.

 
Nahoru Odpovědět 10.10.2016 18:40
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 18:46

Teď už se dostanu do funkce, ale podmínky složený podle rady nefungujou.

promiň, nerozumím řeči tvého kmene

 
Nahoru Odpovědět 10.10.2016 18:46
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 18:49

asi mám jen špatně složené podmínky

 
Nahoru Odpovědět 10.10.2016 18:49
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 18:50

rozbila se mi křišťálová koule, takže to těžko posoudím

 
Nahoru Odpovědět 10.10.2016 18:50
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 18:56

Třeba tohle:

if(date.Day >= 21 && date.Month >= 3 && date.Day <= 20 && date.Month <= 4)
                return "beran";

má vypsat berana od 21.3 až 20.4. Když napíšu 22.3, tak mi to podmínku nesplní. Zdá se mi podmínka dobře zapsaná

 
Nahoru Odpovědět 10.10.2016 18:56
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 19:04

protože je nesmyslná:
datum musí být větší nebo rovno 21 a menší nebo rovno 20

 
Nahoru Odpovědět 10.10.2016 19:04
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 19:09

Jasně, když chci dosáhnout toho daného výsledku. Jak je to tedy dobře?

 
Nahoru Odpovědět 10.10.2016 19:09
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 19:11

třeba:

public static string GetS(DateTime date)
{
    switch(date.Month)
    {
        case 3 : return (date.Day < 21) ? "ryby" : "beran";  // březen
        //case 4: ...// duben
        default: return "?";
    }
}
Editováno 10.10.2016 19:13
 
Nahoru Odpovědět 10.10.2016 19:11
Avatar
Frestyle
Člen
Avatar
Frestyle:10.10.2016 19:16

Tenhle zápis upřímně nechápu. Můžu poprosit o opravu mích 3 řádek? Snad to ve třech pochopím

            if(date.Day >= 21 && date.Month >= 3 && date.Day <= 20 && date.Month <= 4)
    return "beran";
else if(date.Day >= 21 && date.Month >= 4 && date.Day <= 20 && date.Month <= 5)
            return "býk";
else if(date.Day >= 21 && date.Month >= 5 && date.Day <= 21 && date.Month <= 6)
            return "blíženci";
 
Nahoru Odpovědět 10.10.2016 19:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 19:19

to se nedá opravit je to nesmysl.

Řekni mi číslo menší než 20 a zároveň větší než 21

udělej to tak, jak jsem ti napsal v posledním příspěvku (přes ten switch)

Editováno 10.10.2016 19:20
 
Nahoru Odpovědět 10.10.2016 19:19
Avatar
Frestyle
Člen
Avatar
Odpovídá na HONZ4
Frestyle:10.10.2016 19:30

Dobře. Vypadá to jako elegantní řešení. Snad to poskládám :-) Moc děkuji

 
Nahoru Odpovědět 10.10.2016 19:30
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:10.10.2016 19:36
public static string GetS(DateTime date)
{
    switch(date.Month)
    {
        case 1: return (date.Day < 21) ? "kozoroh" : "vodnář";
        case 2: return (date.Day < 21) ? "vodnář" : "ryby";
        case 3: return (date.Day < 22) ? "ryby" : "beran";
        case 4: return (date.Day < 21) ? "beran" : "býk";
            //doplň si další měsíce a oprav chyby co tam mám (nechce se mi to hledat)
        default: return "?";
    }
}
Editováno 10.10.2016 19:37
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10.10.2016 19:36
Avatar
Frestyle
Člen
Avatar
Odpovídá na HONZ4
Frestyle:10.10.2016 19:40

Právě jsem ti chtěl napsat velké díky. Moc pěkný a funkční řešení.

 
Nahoru Odpovědět 10.10.2016 19:40
Avatar
Frestyle
Člen
Avatar
Frestyle:11.10.2016 21:57

Chci se jen zeptat naposledy k podmínce u datumu jak to udělat pokud tam musí být i rok?
Příklad:

if(date >= 1900-01-31 && date <= 1901-02-18)
 
Nahoru Odpovědět 11.10.2016 21:57
Avatar
Frestyle
Člen
Avatar
Frestyle:12.10.2016 15:27

Už jsem na to přišel. Moc děkuji ještě jednou.

 
Nahoru Odpovědět  +1 12.10.2016 15:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.