Avatar
Frestyle
Člen
Avatar
Frestyle:

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. října 15:06
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Frestyle
Jan Vargovský:

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. října 15:59
 
Nahoru Odpovědět  +2 10. října 15:59
Avatar
Frestyle
Člen
Avatar
Odpovídá na Jan Vargovský
Frestyle:

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. října 16:20
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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

 
Nahoru Odpovědět 10. října 18:06
Avatar
Frestyle
Člen
Avatar
Frestyle:
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. října 18:20
Avatar
HONZ4
Člen
Avatar
HONZ4:
//nesmysl: DateTime.Parse datum = dateTimePicker1;
        label2.Text = GetS(dateTimePicker1.Value);
 
Nahoru Odpovědět  +1 10. října 18:28
Avatar
HONZ4
Člen
Avatar
HONZ4:

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. října 18:39
 
Nahoru Odpovědět 10. října 18:37
Avatar
Frestyle
Člen
Avatar
Frestyle:

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. října 18:40
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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. října 18:46
Avatar
Frestyle
Člen
Avatar
Frestyle:

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

 
Nahoru Odpovědět 10. října 18:49
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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

 
Nahoru Odpovědět 10. října 18:50
Avatar
Frestyle
Člen
Avatar
Frestyle:

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. října 18:56
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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

 
Nahoru Odpovědět 10. října 19:04
Avatar
Frestyle
Člen
Avatar
Frestyle:

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

 
Nahoru Odpovědět 10. října 19:09
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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. října 19:13
 
Nahoru Odpovědět 10. října 19:11
Avatar
Frestyle
Člen
Avatar
Frestyle:

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. října 19:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:

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. října 19:20
 
Nahoru Odpovědět 10. října 19:19
Avatar
Frestyle
Člen
Avatar
Odpovídá na HONZ4
Frestyle:

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

 
Nahoru Odpovědět 10. října 19:30
Avatar
HONZ4
Člen
Avatar
Odpovídá na Frestyle
HONZ4:
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. října 19:37
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10. října 19:36
Avatar
Frestyle
Člen
Avatar
Odpovídá na HONZ4
Frestyle:

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

 
Nahoru Odpovědět 10. října 19:40
Avatar
Frestyle
Člen
Avatar
Frestyle:

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. října 21:57
Avatar
Frestyle
Člen
Avatar
Frestyle:

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

 
Nahoru Odpovědět  +1 12. října 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.