» »

C# in DateTime

C# in DateTime

HeadLens ::

Pozdrav,
tokrat ne najdem pravilne rešitve za DateTime problem.
In sicer.... delam okensko aplikacijo WindowsForms s C#. Imam narejeno tabelo z ListView gradnikom, ki ima 7. stolpcev, ki predstavljajo. Tako hočem v prvo vrstico pod vsak stolpec izpisati, pravilen datum, ki se nanaša na tisti dan. Se pravi orientiram se po današnjem datumu
npr. 27.11.2013 in tega vnesem v 3.stolpec pod sredo.... nato pa moram zapolniti še ostale.

Problema sem se lotil tako, da sem celoten datum razkosal na 3 dele.... dan, mesec, leto.
Potem preveril kateri dan v tednu je in nato glede na tistega prištel ali odštel dneve za ostale dni v tednu.
Če se nahajamo na sredini meseca, dela vse lepo in prav, če pa je npr. 1.12.2013 nedelja pa po za soboto izračunalo 0.12.2013 kar je narobe.

Sem prepričan, da tule obstaja kakšna konkretna rešitev, ki ne požre 30 vrstic kode, ni dela samo v sredini meseca :D

urbecar ::

Zgodovina sprememb…

  • spremenil: urbecar ()

Monster ::

Racunas s števili ali uporabljaš DateTime metode?

Za dneve recimo .AddDays(...), pomojem lahko tudi odštevaš.

http://msdn.microsoft.com/en-us/library...
Ka zaboga...

JanOlMajti ::

Koda

HeadLens ::

Hvala Monster, zadeva deluje zdaj pravilno.

Ostalim za primer če je dan sreda :)

string danVTednu = DateTime.Today.DayOfWeek.ToString();
            DateTime danes = DateTime.Now;


if (danVTednu == "Wednesday")
            {
                listViewSeznam.Items.Add(danes.AddDays(-2).ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.AddDays(-1).ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.AddDays(1).ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.AddDays(2).ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.AddDays(3).ToShortDateString());
                listViewSeznam.Items[0].SubItems.Add(danes.AddDays(4).ToShortDateString());
            }

Monster ::

DayOfWeek je enum .. tako da ne rabiš parsat v string in delat string compare :)

DateTime dt = new DateTime(2003, 5, 1);
Console.WriteLine("Is Thursday the day of the week for {0:d}?: {1}", 
                   dt, dt.DayOfWeek == DayOfWeek.Thursday);
Console.WriteLine("The day of the week for {0:d} is {1}.", dt, dt.DayOfWeek);
Ka zaboga...

Monster ::

.. mi pa vseeni ni jasno kaj želiš narediti ... V vsakem primeru hočeš prikazat vse dni v tednu, samo v drugačnem zaporedju glede na trenutni dan?
Ka zaboga...

HeadLens ::

Ko odpreš program imaš v tabeli vedno aktualen datum za vsak dan v tednu!

Zgodovina sprememb…

  • spremenilo: HeadLens ()

FiDeK ::

Zakompliciral si. Vse kar rabiš za izpis imena dneva za nek datum je:


DateTime.Now.ToString("dddd");


in za danes ti to vrne "sreda". Potem ne rabiš ničesar podobnega: if (danes = "wednesday")....

HeadLens ::

FiDeK je izjavil:

Zakompliciral si. Vse kar rabiš za izpis imena dneva za nek datum je:


DateTime.Now.ToString("dddd");


in za danes ti to vrne "sreda". Potem ne rabiš ničesar podobnega: if (danes = "wednesday")....


Zelo zanimivo, da pri primeru 1. vrne zapis dneva v angleščini -> "Wednesday"
pri tvojem drugem primeru pa v slo -> "sreda"!

Primer1: DateTime.Today.DayOfWeek.ToString()
Primer2: DateTime.Now.ToString("dddddddddd")

a je to odvisno ali imaš OS v slo ali angleščini ?
Tisti if pa potrebujem, ker se glede na dan računajo ostali dnevi.

FiDeK ::

Res je, MSDN pove točno to

The members of the DayOfWeek enumeration are not localized. To return the localized name of the day of the week, call the DateTime.ToString(String) or the DateTime.ToString(String, IFormatProvider)


DayOfWeek ti ne bo vrnil lokaliziranega stringa, ti bo pa koristil, če se hočeš spraševati, ali je danes sobota:

if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday)


Ta koda ni odvisna od nastavitev lokalizacije. Če pa hočeš ime dneva v tekstovni obliki pa pokličeš ToString("dddd"). Ta klic upošteva lokalizacijo okolja, v katerem poganjaš program. Jaz imam lokalizacijo na slovensko, tako da je izpisalo "sreda". Lahko pa metodi podaš še en argument in boš dobil string v točno določeni lokalizaciji:

DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("de"))


Tu boš dobil "Donnerstag", kar je sreda v nemščini.


Vredno ogleda ...

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

[C#] WPF vprašanja

Oddelek: Programiranje
10655 (277) Ciklamen
»

[ASP.NET] Prenos podatkov iz ene spletne strani v drugo

Oddelek: Programiranje
14568 (427) Cvenemir
»

asp.net calendar

Oddelek: Programiranje
6558 (413) Mitja Bonča
»

[C#] prikazovanje int spremenljivk v sporočilnem oknu

Oddelek: Programiranje
11996 (706) darkolord
»

[Visual C#] posodabljanje polja

Oddelek: Programiranje
111234 (1054) iggy1

Več podobnih tem