Avatar billede CodingJoe Nybegynder
19. december 2010 - 18:53 Der er 17 kommentarer og
1 løsning

DateTime 'første-dato-for-denne-uge' problem

Jeg har lige opdaget en lille uhensigtsmæssighed i min kode. Idag er det tilsyneladende søndag, og dvs. at vi stadigvæk er i den samme uge (dansk uge = fra mandag til søndag). Dog opfatter min kode at vi er i en ny uge, hvilket gør min kode ubrugelig.

Hvordan finder jeg den første dato i en uge? Det sådan set det spørgsmål jeg har.

Jeg har angivet 'da-DK' som CultureInfo i min web.config.

Jeg gør følgende:

DateTime FirstDate = DateTime.Today.AddDays(-((int)DateTime.Today.DayOfWeek - (int)CultureInfo.CurrentUICulture.DateTimeFormat.FirstDayOfWeek)).Date;

Hvad er det lige præcis, jeg gør galt?
Avatar billede arne_v Ekspert
19. december 2010 - 19:07 #1
Den simple løsning er:

            DateTime dt = DateTime.Now;
            while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
Avatar billede arne_v Ekspert
19. december 2010 - 19:12 #2
Hvis du skal bruge koden til en konkurrence om at lave den mest ulæselige kode så prøv:

            DateTime FirstDate = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek - (int)CultureInfo.CurrentUICulture.DateTimeFormat.FirstDayOfWeek) + 7) % 7).Date;
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:18 #3
He he he he...ked af at høre at det virker ulæseligt...men VS hjælper med colouring...grunden til, jeg har skrevet koden på den måde, er fordi jeg har kapslet det ind i en get property, der hedder 'ThisWeek', som så returnerer start og slutdatoen i denne uge.

Prøver lige det du har sendt mig...
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:20 #4
Ahh kan se din version overgår min en anelse i 'ulæslighed'...kan du evt. skrive hvad jeg overså i min version?
Avatar billede arne_v Ekspert
19. december 2010 - 19:21 #5
Min simple version er sådan at enhver kan gennemskue logikken.
Avatar billede arne_v Ekspert
19. december 2010 - 19:22 #6
Det min ulæselige version gør anderledes end din er at 0 og 1 bliver til -6 fremfor til +1.
Avatar billede arne_v Ekspert
19. december 2010 - 19:23 #7
Console.WriteLine((int)DateTime.Today.DayOfWeek);
Console.WriteLine((int)CultureInfo.CurrentUICulture.DateTimeFormat.FirstDayOfWeek);

vil afsløre problematikken.
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:26 #8
Ahhh havde læst et sted at DayOfWeek er en enum, der i virkeligheden er en int, og at 0 og 1 er knyttet til nogle forskellige dage på ugen alt efter culture info...

Respekt
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:28 #9
Du røg lige ind med forklaringen før mig, inden jeg fik skrevet min forklaring :)

Din løsning gav mig mit svar...tak for hjælpen...der er masser af sne i DK...hvis du stadigvæk er in the states...
Avatar billede arne_v Ekspert
19. december 2010 - 19:31 #10
et svar fra mig
Avatar billede arne_v Ekspert
19. december 2010 - 19:31 #11
ja - jeg bor stadig i USA
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:35 #12
Og her er points...håber din løsning virker for både engelsk og dansk culture...dvs. hvor første ugedag kan være søndag eller mandag...alt efter culture :)
Avatar billede arne_v Ekspert
19. december 2010 - 19:40 #13
Min simple løsning forudsætter mandag.

Men erstat

DayOfWeek.Monday

med

CultureInfo.CurrentUICulture.DateTimeFormat.FirstDayOfWeek
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:42 #14
Ok...mange tak...kunne godt se, der var noget, der ikke virkede 'cross' culture info.
Avatar billede CodingJoe Nybegynder
19. december 2010 - 19:47 #15
De "ulæselige" virker fint med en engelsk Culture. Så alt spiller fint her :D
Avatar billede arne_v Ekspert
19. december 2010 - 20:39 #16
0-0 = (0-0+7)%7

så ikkke noget problem med Søndag som første dag.
Avatar billede CodingJoe Nybegynder
21. december 2010 - 07:26 #17
Hej Arne

Har du også mulighed for at svare på denne? http://www.eksperten.dk/spm/926965

:)
Avatar billede arne_v Ekspert
21. december 2010 - 15:22 #18
Jeg har set det.

Jeg ved ogsaa hvad problemet er.

Men jeg vil skulle bruge lidt tid paa at lave en loesning.

Hvis jeg finder tiden skriver jeg noget i spoergsmaalet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester