Diskuze: Datumová podmínka
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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";
...
}
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)
dej sem ukázku..
Takhle můžu poradit pouze DateTime.Parse
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.DateTime.Parse(string) je metoda, ale používá se jako typ. (CS0118)
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);
}
}
Teď už se dostanu do funkce, ale podmínky složený podle rady nefungujou.
promiň, nerozumím řeči tvého kmene
protože je nesmyslná:
datum musí být větší nebo rovno 21 a menší nebo rovno 20
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 "?";
}
}
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";
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)
Dobře. Vypadá to jako elegantní řešení. Snad to poskládám Moc děkuji
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 "?";
}
}
Právě jsem ti chtěl napsat velké díky. Moc pěkný a funkční řešení.
Zobrazeno 22 zpráv z 22.