Avatar billede ameq Nybegynder
10. januar 2006 - 09:42 Der er 17 kommentarer og
2 løsninger

Hvordan får man uge nummer

Hej, jeg ville høre hvordan man få uge nummeret ud fra en datatime.now ?
Avatar billede ameq Nybegynder
10. januar 2006 - 09:46 #1
og hvordan man få en liste ud over hvor mange uger som er gået i år
Avatar billede dr_chaos Nybegynder
10. januar 2006 - 09:52 #2
DateTimeFormatInfo dateFormat = new DateTimeFormatInfo();     
int weekNumber = dateFormat.Calendar.GetWeekOfYear(DateTime.Now);
Avatar billede arne_v Ekspert
10. januar 2006 - 10:05 #3
mit standard eksempel:

using System;
using System.Globalization;

using Microsoft.VisualBasic;

namespace E
{
    public class TimeUtil
    {
        public static int Week1(int year, int mon, int day)
        {
            return (new CultureInfo("da-DK", false)).Calendar.GetWeekOfYear(new DateTime(year, mon, day), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
        }
        public static int Week2(int year, int mon, int day)
        {
            return DateAndTime.DatePart("ww", new DateTime(year, mon, day), Constants.vbMonday, Constants.vbFirstFourDays);
        }
        public static int Week3(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 class TestClass
    {
        public static void Test(int year, int mon, int day)
        {
            Console.WriteLine((new DateTime(year, mon, day)).ToString("dddd dd/MM/yyyy") + ": " +
                              TimeUtil.Week1(year, mon, day) + " " +
                              TimeUtil.Week2(year, mon, day) + " " +
                              TimeUtil.Week3(year, mon, day));
        }
        public static void Main(string[] args)
        {
            for(int y = 2002; y < 2006; y++)
            {
                Test(y, 12, 28);
                Test(y, 12, 29);
                Test(y, 12, 30);
                Test(y, 12, 31);
                Test(y+1, 1, 1);
                Test(y+1, 1, 2);
                Test(y+1, 1, 3);
                Test(y+1, 1, 4);
                Test(y+1, 1, 5);
                Test(y+1, 1, 6);
            }
        }
    }
}
Avatar billede ameq Nybegynder
10. januar 2006 - 10:49 #4
Så kommer mit næste sprøgsmål hvad er best, hva jeg har læst på nette så skal der en del kode til. Men hvis dr_chaos virker så vel jeg da helt bruge det
Avatar billede arne_v Ekspert
10. januar 2006 - 11:05 #5
dr_chaos kode er den af MS anbefalede

men hvis du kører mit program vil du se at der er et problem med den
Avatar billede ameq Nybegynder
10. januar 2006 - 11:14 #6
med MS anbefalede?
Avatar billede dr_chaos Nybegynder
10. januar 2006 - 11:16 #7
der er nogle problemer med den omkring årsskifte.
Hvor den så vidt jeg husker ikke følger de standarder der gælder i danmark.
Avatar billede ameq Nybegynder
10. januar 2006 - 11:58 #8
okey
Avatar billede ameq Nybegynder
10. januar 2006 - 12:00 #9
men arne_v så skal jeg havde lidt hjælp til at forstå hvad de kode gøre hvorfor er det lige du har 3 week metoder?
Avatar billede dr_chaos Nybegynder
10. januar 2006 - 12:28 #10
for at vise forskellene mellem forskellige måder at beregne uge nummer på.
Week3 er den rigtige metode der overholder standarderne
Avatar billede arne_v Ekspert
10. januar 2006 - 12:34 #11
det er:

the .NET way

the VB way

the correct way
Avatar billede ameq Nybegynder
10. januar 2006 - 13:25 #12
det vil alt så sige at jeg skal bruge den her
        public static int Week3(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;
        }
Men hvorfor skal jeg dog havde har 3 arg. med over??
Avatar billede dr_chaos Nybegynder
10. januar 2006 - 13:27 #13
fordi f.eks 1 jan ikke altid ligger i uge men også kan ligge i uge 53.
Det er for at sikre at beregningerne sker korrekt og for at du har mulighed for at se uge numre i andre år end det nuværende.
Avatar billede ameq Nybegynder
10. januar 2006 - 13:49 #14
men ville jeg ikke lige så godt kunne overføre et datetime obj? også havde data'en ud der fra?
Avatar billede arne_v Ekspert
10. januar 2006 - 13:53 #15
sagtens

jeg tror jeg valgte de 3 argumenter ag hensyn til min test for løkke
Avatar billede arne_v Ekspert
10. januar 2006 - 13:54 #16
eller var det fordi jeg porterede fra C til C# ??
Avatar billede ameq Nybegynder
10. januar 2006 - 15:21 #17
okey he =) takker for det
kommer i med et svar?
Avatar billede arne_v Ekspert
10. januar 2006 - 15:25 #18
.
Avatar billede dr_chaos Nybegynder
10. januar 2006 - 18:32 #19
svar :)
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