» »

[C#] - addDays

[C#] - addDays

tx-z ::

Imam datum, recimo 20.4.2014. Temu datumu želim prišteti 15 dni. Funkcija addDays mi vrne 5.4.2014. Želim, da mi vrne 5.5.2014, kot bi bilo logično (isto velja če je vmes novo leto).

Kako to narest? Na googlu kot da noben nima podobne težave?
tx-z

mihor ::

Kaj pa, če mu dodaš -15 dni? :)

Utk ::

tx-z je izjavil:

Imam datum, recimo 20.4.2014. Temu datumu želim prišteti 15 dni. Funkcija addDays mi vrne 5.4.2014. Želim, da mi vrne 5.5.2014, kot bi bilo logično (isto velja če je vmes novo leto).

Kako to narest? Na googlu kot da noben nima podobne težave?

Morda zato, ker si ti edini na svetu, ki mu to vrne?
Bolj verjetno pa je, da si zamenjal dneve in mesece.

Yacked2 ::

A si za računanje po modolu že slišal ?
Naredil int array z številom dnevov v tednu:
int[] DneviVMesecu = new int[]{31,28,31,30,....};


nato ustvarimo 3 int spremenljivke, ena za dan, drugo za mesec, tretje za leto:
int dan;
int mesec;
int leto;


nato tvoj datum splitaš na 3 dele (splita tam kjer je pika) in nato te Stringe pretvoriš v int ter shraniš v te spremenljivke.

nato potrebujemo novo spremenljivko, ki pove koliko dni želiš prišteti:
int n; 


Okej...sedaj dnevom prištejemo n
int DanPlusN = dan+n;


za to vrednost preverimo ali še obstaja (npr. če 26 prišteješ 15 dobiš več kot je dni v mesecu):
to preverimo:
if( DanPlusN <= DneviVMesecu[mesec-1])


ker se indexi v arrayu štejejo od 0 in ne od 1, moremo to popraviti tako da od meseca odštejemo 1.
če je ok, je to to in izpišemo, drugače gremo naprej:

else

sedaj izračunamo ostanek deljenja (mod)
int mod = DanPlusN % DneviVMesecu[mesec-1];

to vrednost prištejemo k dnevom:
dan += mod;

Sedaj pogledamo še mesece:
int m = DanPlusN / DneviVMesecu[mesec-1];


m ti pove, koliko mesec smo šli naprej. Zato to prištejemo mesecem, ampak pozor, kaj če smo v decembru?...

int MeseciVse = m + mesec;


pogledamo ali je MeseciVse manjši ali enako 12. Če je manj je vredu in nastavimo vrednost mesec = MeseciVse,
drugače moramo spremeniti leto.
Ponovimo isto kot z meseci. Po modolu izračunamo koliko mesec naprej se prestavimo, ostanek delenja pa prištejemo letu in to je to.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Utk ::

Yacked, WTF? Zakaj bi to delal, če vgrajena funkcija dela pravilno in logično. Samo ločit je treba med dnevi in meseci.

Yacked2 ::

Utk je izjavil:

Yacked, WTF? Zakaj bi to delal, če vgrajena funkcija dela pravilno in logično. Samo ločit je treba med dnevi in meseci.


To je točno to, kar vgrajena funkcia naredi. Če jo ne zna uporabiti, naj si napiše svojo.

Pozabil sem še čekiranje če je leto prestopno ali ne :D
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Zgodovina sprememb…

  • spremenil: Yacked2 ()

Utk ::

Ne ni, ker ne upoštevaš prestopnega leta. Vprašanje tudi kaj bi blo, če bi ti dal not 10323 dni.

Yacked2 ::

Utk je izjavil:

Ne ni, ker ne upoštevaš prestopnega leta. Vprašanje tudi kaj bi blo, če bi ti dal not 10323 dni.


Sem se popravlil, preden si objavil komentar. Dokler si v int območju bi delalo, potem bi bilo pa treba popraviti velikost spremenljivk. Ter nato dneve razbiti v dneve, mesece in leta, ter posebej prišteti.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Utk ::

Vgrajena AddDays dela ravno obratno. Ne glede kaj prištevaš, dneve, mesece, leta, vse pretvori v tickse. Ko pa bereš recimo dan, iz ticksov izračuna kater dan je. Enako mesec, leto. Add* funkcije postanejo čisto trivialne, get pa tudi ni tako komplicirana.

tx-z ::

DateTime parsedDate;
String datePattern = "dd.mm.yyyy";
DateTime.TryParseExact("20.04.2014", datePattern, null, DateTimeStyles.None, out parsedDate);
String datumOd = parsedDate.ToString("yyyy-mm-dd");
String datumDo = parsedDate.addDays(15).ToString("yyyy-mm-dd");


//datumDo vrne 2014-04-05

Lahko da drugje delam kaj narobe.
tx-z

Zgodovina sprememb…

  • spremenilo: tx-z ()

Utk ::

A ni format za mesece velik M? Mali m pa za minute. Tako da mu ti daš not 4 minute, in nobenga meseca, isto pa tudi prebereš ven.

Zgodovina sprememb…

  • spremenil: Utk ()

tx-z ::

O fak.

Ta tema se lahko zapre :))

Hvala vsem za odgovore :)

p.s.: Sej v principu je delal, ker sem itak nazaj potem pretvoril, ampak kera fora, jao. :)
tx-z


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c++ DODAJANJE elementov iz datoteke v vektor

Oddelek: Programiranje
7931 (806) Tutankhamun
»

Java

Oddelek: Pomoč in nasveti
141355 (980) shadeX
»

C# (strani: 1 2 )

Oddelek: Programiranje
9711993 (8828) Ericssony
»

Java - dva problema

Oddelek: Programiranje
141718 (1326) nightrage
»

[Vsi jeziki / C++] preprost logičen problem

Oddelek: Programiranje
61107 (1014) win64

Več podobnih tem