Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Porovnání datumu ve Foreach cyklu - aplikace spadne

Aktivity
Avatar
Matyáš Černohous:1.2.2015 0:09

Zdravím, řeším problém ohledně foreach cyklu. Mám aplikaci pro WP 8.1 a ve foreach porovnávám 2 datumy. Když jsem si zkoušel dát breakpoint na porovnání, tak se datumy porovnaly, ale hned potom aplikace spadne. Nevíte kde by mohl být problém. Když tam to porovnání není, tak kód funfuje normálně. Díky :)

foreach (Tasks ta in obj)
           {

               string sPredmet = ta.Predmet;
               string sDatum = ta.Datum;
               string SPripom = ta.Pripomenuti;
               string sZbD = ta.ZbyvaDni;
               string sSdileno = ta.Sdileno;
               string sSpleneno = ta.Splneno;

               int results = DateTime.Compare(DateTime.Parse(ta.Datum.ToString()), DateTime.Parse(datum.ToString()));  - tady aplikace spadne i když se data porovnala

               if(results > 0)
               {
                   MissTasks.Add(new Tasks(sPredmet, sDatum, sSpleneno, sZbD, SPripom, sSdileno));
               }
               else
               {
                   myTasks.Add(new Tasks(sPredmet, sDatum, sSpleneno, sZbD, SPripom, sSdileno));
               }
           }
 
Odpovědět
1.2.2015 0:09
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Jan Vargovský:1.2.2015 0:39

Uvědomuješ si co vůbec děláš? Ty vezmeš datum, převedeš ho na string a pak si ho převedeš znova na datum. Nevím co dělá DateTime.Compare, ale to nemůžeš jednoduše napsat:

ta.Datum > datum

Popřípadě s tou Compare metodou:

DateTime.Compare(ta.Datum, datum);
 
Nahoru Odpovědět
1.2.2015 0:39
Avatar

Člen
Avatar
:1.2.2015 10:17

Rada1: rozděl si vyhodnocování řádek po řádku. Nejdřív naparsuj data, pak je předej k porovnání.
Rada2: Když chceš radu, hodil by se stack trace nebo aspoň informace o té vyjimce, která tam vyletěla.

 
Nahoru Odpovědět
1.2.2015 10:17
Avatar
Odpovídá na Jan Vargovský
Matyáš Černohous:1.2.2015 14:41

Ano, uvědomuju. Jak jsi psal, že to mám zkusit jednoduše porovnat, tak to bylo to první co jsem udělal, ale dopadá to stejně. Nejhorší je, že to nevyhodí žádnou vyjímku, ale přímo Global error, takže se nemám čeho chytit...

 
Nahoru Odpovědět
1.2.2015 14:41
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Jan Vargovský:1.2.2015 14:57

Můžeš to vyfotit?

 
Nahoru Odpovědět
1.2.2015 14:57
Avatar
Odpovídá na Matyáš Černohous
sadlomaslox25:1.2.2015 15:14

nefunguje to protoze to spadne na parse (na cem jinem by to taky spadlo ze :))

pada to tam z duvodu ze tam cpes datum ve spatnem formatu. zalezi na jakem vlakne poustit tu metodu parse protoze ta si bere z aktualniho vlakna Culturu a zkousi to parsovat vuci ni (takze nejspis se pokousis prevest cesky format datumu pomoci anglicke varianty DateTime.Parse).

alternativne to jeste muze spadnout na nullExceptionu to protoze nektery ze stringu je null.

rada: v programu string reprezentuj vzdy strukturou DateTime

 
Nahoru Odpovědět
1.2.2015 15:14
Avatar
Odpovídá na Matyáš Černohous
Michal Štěpánek:1.2.2015 15:21

Nezkusil sis vypsat, jaké hodnoty se ti to vlastně ve skutečnosti porovnávají?

Nahoru Odpovědět
1.2.2015 15:21
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:1.2.2015 15:27

Jo ty máš to datum ve stringu, tak jsme doma... Btw, celkem si mě pobavil :D ještě jsem neviděl volat na stringu ToString :D

Editováno 1.2.2015 15:28
 
Nahoru Odpovědět
1.2.2015 15:27
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Petr Čech:1.2.2015 16:49
foreach (Tasks ta in obj)
            {
                string sPredmet = ta.Predmet;
                string sDatum = ta.Datum;
                string SPripom = ta.Pripomenuti;
                string sZbD = ta.ZbyvaDni;
                string sSdileno = ta.Sdileno;
                string sSpleneno = ta.Splneno;

                int results = DateTime.Compare(ta.Datum, datum);//předpokládám, že ta.Datum je DateTime
                if(results > 0)
                {
                    MissTasks.Add(new Tasks(sPredmet, sDatum, sSpleneno, sZbD, SPripom, sSdileno));
                }
                else
                {
                    myTasks.Add(new Tasks(sPredmet, sDatum, sSpleneno, sZbD, SPripom, sSdileno));
                }
            }

možná ti pomůže https://msdn.microsoft.com/…vs.110).aspx
nevíme, co je v "datum" Jestli je to DateTime, bude to fungovat. jestli ne, tak si ho tam ulož, ale jinak než DateTime.Parse(), nebo používej cultures
jinak Jan Vargovský myslím, že se to nedá porovnávat jen pomocí <, >, ... Už jsem na tom jednou pohořel. Nebo to prostě neumím používat, no :D

Editováno 1.2.2015 16:51
Nahoru Odpovědět
1.2.2015 16:49
the cake is a lie
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr Čech
Jan Vargovský:1.2.2015 16:52
public static TimeSpan operator -(DateTime d1, DateTime d2);
public static DateTime operator -(DateTime d, TimeSpan t);
public static bool operator !=(DateTime d1, DateTime d2);
public static DateTime operator +(DateTime d, TimeSpan t);
public static bool operator <(DateTime t1, DateTime t2);
public static bool operator <=(DateTime t1, DateTime t2);
public static bool operator ==(DateTime d1, DateTime d2);
public static bool operator >(DateTime t1, DateTime t2);
public static bool operator >=(DateTime t1, DateTime t2);

Spíše to druhé :)

 
Nahoru Odpovědět
1.2.2015 16:52
Avatar
Odpovídá na sadlomaslox25
Matyáš Černohous:1.2.2015 19:51

Tak to padá přesně kvůli tomu jak jsi říkal. Moje datum je ve formátu dd/mm/yyyy a snaží se to parsovat do DateTime EN dd/mm/yyyy hh:mm:ss AM. Nevíte jak bych mohl udělat, aby to šlo přímo do českého, nebo jen do formátu **dd/mm/yy **?

Jan Vargovský mám datum ve stringu, bohužel ho jako DateTime nedostanu :/

Editováno 1.2.2015 19:51
 
Nahoru Odpovědět
1.2.2015 19:51
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Jan Vargovský:1.2.2015 20:01
CultureInfo culture = new CultureInfo("cs-CZ");
DateTime date = DateTime.Parse("1/2/2015", culture);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
1.2.2015 20:01
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 13 zpráv z 13.