Diskuze: Chybný převod datumu

C# .NET .NET (C# a Visual Basic) Chybný převod datumu American English version English version

Avatar
Frestyle
Člen
Avatar
Frestyle:

Dobrý večer, prosím kde dělám chybu? Snažím se dostat datum po odečtu ze současného, ale něco dělám špatně. Děkuji

public static string Prevod(DateTime dat1)
{
DateTime dat2 = DateTime.Now;
TimeSpan ts = dat2 - dat1;
DateTime vs = Convert.ToDate­Time(ts);
return vs.ToString();
}

 
Odpovědět 2. listopadu 18:30
Avatar
Odpovídá na Frestyle
Tomáš Brabec:

Z TimeSpan (doby, např. 6 dní a 5 hodin) udělat datum (DateTime) moc smysl nedává ne?

Nahoru Odpovědět 2. listopadu 18:38
Lidé se dělí do 10 skupin. Jedni dvojkovou soustavu znají a druzí ne.
Avatar
Frestyle
Člen
Avatar
Odpovídá na Tomáš Brabec
Frestyle:

Potřebuju datovej výstup. Jinak by to smysl nedávalo

 
Nahoru Odpovědět 2. listopadu 19:01
Avatar
Frestyle
Člen
Avatar
Odpovídá na ostrozan
Frestyle:

Na místo: DateTime vs = Convert.ToDate­Time(ts);
Dám: DateTime vs = DateTime.Substrac­t(ts); ?

 
Nahoru Odpovědět 2. listopadu 19:48
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Frestyle
ostrozan:

Teď to nemám jak zkusit, ale mělo by to fungovat zhruba takto :

public static string Prevod(DateTime dat1)
{
return DateTime.Now.Subtract(dat1). ToString();
}
 
Nahoru Odpovědět 2. listopadu 20:06
Avatar
Frestyle
Člen
Avatar
Odpovídá na ostrozan
Frestyle:

To vypisuje pouze aktuální datum. Né výpočet

 
Nahoru Odpovědět 2. listopadu 20:41
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Frestyle
ostrozan:

Psal jsem to z hlavy na mobilu - má tě to jen nasměrovat správným směrem.
Prostě když chceš odečíst od datumu datum, nebo timespan použij Subtract

 
Nahoru Odpovědět 2. listopadu 21:05
Avatar
Frestyle
Člen
Avatar
Odpovídá na ostrozan
Frestyle:

Zkusil jsem tohle: DateTime ts = dat2.Subtract(dat1);
ale hlásí to chybu

 
Nahoru Odpovědět 2. listopadu 21:15
Avatar
Frestyle
Člen
Avatar
Frestyle:

return dat2.Subtract(dat1)­.ToString();

Vypíše: 21:19:46.5143316
Já se snažím aby vypsal datumem, ale stále bloudím

 
Nahoru Odpovědět 2. listopadu 21:22
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Frestyle
Lukáš Křehula:

Nějak tomu nerozumím, co přesně chceš z výstupu dostat? Resp. napiš nějaký příklad, vstup a výstup.

 
Nahoru Odpovědět  +1 2. listopadu 21:48
Avatar
Honza
Člen
Avatar
Honza:

Ahoj, z proměnné typu TimeSpan získáš počet něčeho. Typicky sekund, hodin, dnů, měsíců atd. které jsou výsledke toho rozdílu dvou dat co tam máš. Ale nemá smysl to převádět na DateTime. Jak by měla být nastavená logika?

Představ si to na časové ose. Když vezmeš dva body na časové ose (DateTime), tak můžeš získat informaci jak jsou daleko od sebe (TimeSpan) v nějakých jednotkách (např. ve dnech). Ale už nemáš jak z toho udělat další bod (DateTime). Jinýmy slovy, DateTime je bod a TimeSpan úsek.

Od data můžeš odečíst nějaký konkrétní časový úsek (měsíc, den, atd.) ale nemůžeš odečíst jiné datum. Pokud uvažuješ tak, že např. 01.01.3000 - 01.01.1000 = 01.01.2000 tak takhle to nefunguje. Nedává to smysl.

Editováno 2. listopadu 23:33
Nahoru Odpovědět  +2 2. listopadu 23:30
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
HONZ4
Člen
Avatar
HONZ4:

Jen doplním, že (když nepůjdeme moc do detailů), tak už počítat kolik je to měsíců je nesmyslné (nejsou všechny stejně dlouhé). Takže stačí vypsat TimeSpan jako dny a čas pomocí .ToString() nebo si určit vlastní formát výpisu. návod je zde

Editováno 3. listopadu 0:09
 
Nahoru Odpovědět 3. listopadu 0:07
Avatar
Frestyle
Člen
Avatar
Frestyle:

Aď dělám co dělám, tak mi nejde Timespan předělat do datového formátu. Návod mi moc nepomohl. Je to tam na čas, ale já chci výsledek vypsat v datumu

 
Nahoru Odpovědět 3. listopadu 15:01
Avatar
Frestyle
Člen
Avatar
Frestyle:

Přesně se snažím převést tonto počet do datumu:

public static string Prevod(DateTime dat1)
{
    int cislo = 6;
    DateTime ts = dat1 - cislo;
    return ts.ToString();
}

Furt se nemůžu dopátrat výsledku. Prosím o nějaký podrobnější článek nebo nápovědu

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 3. listopadu 15:16
Avatar
Odpovídá na Frestyle
Michal Štěpánek:

Tak nevím, jestli si sedíš na vedení či co? Všichni ti tu píšou, že to co děláš je blbost a ty si pořád nedáš říct... Od datumu (DateTime) nemůžeš jen tak odečítat číslo(int). Pokud chceš odečíst 6 dnů, musíš takto

DateTime predsestidny = DateTime.Now.Date.AddDays(-6);

A rozdíl mezi datumy NELZE vyjádřit datovým typem DateTime. VŽDYCKY to bude JEN číslo, tzn. třeba "int"

Editováno 3. listopadu 17:41
Nahoru Odpovědět 3. listopadu 17:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Frestyle
Člen
Avatar
Odpovídá na Michal Štěpánek
Frestyle:

Děkuji moc. Někdy sedím, ale pořád se jen učím.

 
Nahoru Odpovědět 3. listopadu 19:07
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Frestyle
ostrozan:

Už jsem to rozepsal, tak to nebudu mazat - i když řešení jsi už asi našel, jen se trochu netrefil s označením :-)

Som z toho voľáky zmätený

Tohle

public static string Prevod(DateTime dat1)
{
DateTime dat2 = DateTime.Now;
TimeSpan ts = dat2 - dat1;
DateTime vs = Convert.ToDateTime(ts);
return vs.ToString();
}

a toto:

public static string Prevod(DateTime dat1)
{
    int cislo = 6;
    DateTime ts = dat1 - cislo;
    return ts.ToString();
}

jsou docela odlišné věci, ale dobře vezměme to jako že to druhé je zjednodušením (na vysvětlenou) toho prvního
ale znova:
DateTime je strutura vyjadřující datum a čas - dnes je 3.11.2016 18:55:03
TimeSpan je struktura vyjadřující časový úsek - kolik dní,hodin,minut,se­kund ..... uplynulo od daného datumu a času, kolik zbývá ... jak dlouho to trvalo

pokud chceš odečíst dva datumy s časem a vyjádřit to zase datumem a časem tak to jde

public static string Prevod(DateTime dat1)
{
TimeSpan ts =  DateTime.Now.Subtract(dat1);
return DateTime.Now.Subtract(ts)ToString();
}

DateTime.Subtrac­t(DateTime) vrací TimeSpan
DateTime.Subtrac­t(TimeSpan)vra­cí DateTime

tahle konstrukce ale samozřejmě nesmysl - dostaneš zpátky dat1 :-)

takže smysl to má buď jako přičtení ts k DateTime.Now

public static string Prevod(DateTime dat1)
{
TimeSpan ts =  DateTime.Now.Subtract(dat1);
return DateTime.Now.Add(ts)ToString();
}

nebo odečtení/přičtení nějakého jiného DateTime

Jestli nepomůže už ani tohle tak fakt nevím

Editováno 3. listopadu 19:46
 
Nahoru Odpovědět 3. listopadu 19:45
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 18 zpráv z 18.