Avatar billede tommer Nybegynder
10. maj 2011 - 11:45 Der er 6 kommentarer og
1 løsning

datetime er denne uge

jeg vil gerne lave en funktion som tester om en datetime ligger i den aktuelle uge, jeg er kommet frem til følgende. Kan nogen sige om det er lavet rigtigt? min uge skal starte mandag og slutte søndag til midnat:

public static bool IsThisWeek(DateTime dtmDate)
    {
        bool blnReturn = false;

        System.Globalization.CultureInfo myCI = new CultureInfo("da-DK");
        int intWeeknow = myCI.Calendar.GetWeekOfYear(DateTime.Now, System.Globalization.CalendarWeekRule.FirstFourDayWeek, System.DayOfWeek.Monday);
        int intWeek = myCI.Calendar.GetWeekOfYear(dtmDate, System.Globalization.CalendarWeekRule.FirstFourDayWeek, System.DayOfWeek.Monday);

        if (intWeeknow == intWeek)
        {
            blnReturn = true;
        }

        return blnReturn;
    }
Avatar billede Syska Mester
10. maj 2011 - 12:57 #1
Hvis det virker, så er det vel rigtigt.

Du kan jo lave nogen unit tests, og på den måde se om det virker efter hensigten.
Avatar billede ulrikm Nybegynder
10. maj 2011 - 20:46 #2
Det ser helt rigtigt ud..
Avatar billede arne_v Ekspert
11. maj 2011 - 02:15 #3
Algoritmen er perfekt.

Men der er lige en hovsa.

using System;
using System.Globalization;

namespace E
{
    public static class MyExtensions
    {
        // ISO week number
        private static int WeekNum(int year, int mon, int day)
        {
            int a = (14 - mon) / 12;
            int y = year + 4800 - a;
            int m = mon + 12*a - 3;
            int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 + y/400 - 32045;
            int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461;
            int L = d4 / 1460;
            int d1 = ((d4 - L) % 365) + L;
            return d1 / 7 + 1;
        }
        public static int GetWeekNum(this DateTime dt)
        {
            return WeekNum(dt.Year, dt.Month, dt.Day);
        }
    }
    public class Program
    {
        public static bool IsSameWeek1(DateTime d1, DateTime d2)
        {
            CultureInfo ci = new CultureInfo("da-DK");
            return ci.Calendar.GetWeekOfYear(d1, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday) ==
                  ci.Calendar.GetWeekOfYear(d2, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

        }
        public static bool IsSameWeek2(DateTime d1, DateTime d2)
        {
            return d1.GetWeekNum() == d2.GetWeekNum();
        }
        private static void Test(DateTime d1, DateTime d2)
        {
            Console.WriteLine("IsSameWeek1 - " + d1.ToString("dddd dd-MMM-yyyy") + " " + d2.ToString("dddd dd-MMM-yyyy") + " : " + IsSameWeek1(d1, d2));
            Console.WriteLine("IsSameWeek2 - " + d1.ToString("dddd dd-MMM-yyyy") + " " + d2.ToString("dddd dd-MMM-yyyy") + " : " + IsSameWeek2(d1, d2));
        }
        public static void Main(string[] args)
        {
            Test(DateTime.Now, new DateTime(2011, 5, 9));
            Test(DateTime.Now, new DateTime(2011, 5, 6));
            Test(new DateTime(2013, 1, 1), new DateTime(2012, 12, 31));
            Console.ReadKey();
        }
    }
}

udskriver:

IsSameWeek1 - tirsdag 10-maj-2011 mandag 09-maj-2011 : True
IsSameWeek2 - tirsdag 10-maj-2011 mandag 09-maj-2011 : True
IsSameWeek1 - tirsdag 10-maj-2011 fredag 06-maj-2011 : False
IsSameWeek2 - tirsdag 10-maj-2011 fredag 06-maj-2011 : False
IsSameWeek1 - tirsdag 01-jan-2013 mandag 31-dec-2012 : False
IsSameWeek2 - tirsdag 01-jan-2013 mandag 31-dec-2012 : True

(på Windows XP med .NET 3.5)
Avatar billede arne_v Ekspert
11. maj 2011 - 02:16 #4
I nogen sammenhaenge skal man ogsaa teste paa aaret!
Avatar billede tommer Nybegynder
07. juni 2011 - 16:39 #5
send lige et svar her arne, tak ;-)
Avatar billede arne_v Ekspert
07. juni 2011 - 16:42 #6
svar
Avatar billede tommer Nybegynder
07. juni 2011 - 17:06 #7
Tak for altid super hjælp :-)
Hvis du har tid/lyst har jeg et nyt problem her:
http://www.eksperten.dk/spm/940529
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