Avatar billede nickbuus Nybegynder
25. december 2007 - 23:02 Der er 10 kommentarer og
1 løsning

konvertere dato uden årstal til dato format med korrekt årstal

jeg henter en dato fra en kilde som ikke oplyser årstal - underforstået at året altid er det næstkommende år - dvs. ligger datoen i indeværende år er årstallet 2007 . Er måneden derimod i januar skal årstallet så være 2008. Har c# noget indbygget i datetime som automatisk sætter årstallet sådan hvis kun dato og måned indsættes? eller vil nogen hjælpe med noget kode?
Avatar billede arne_v Ekspert
25. december 2007 - 23:26 #1
using System;

namespace E
{
    public class Program
    {
        public static DateTime D(int m, int d)
        {
            DateTime now = DateTime.Now;
            int y = now.Year;
            if(m < now.Month || (m == now.Month && d < now.Day))
            {
                y++;
            }
            return new DateTime(y, m, d);
        }
        public static void Main(string[] args)
        {
            Console.WriteLine(D(12, 26));
            Console.WriteLine(D(12, 24));
            Console.ReadKey();
        }
    }
}

udskriver:

26-12-2007 00:00:00
24-12-2008 00:00:00

er det den logik du søger ?
Avatar billede nielle Nybegynder
26. december 2007 - 07:30 #2
Logikken lyder korrekt, men det kan da gøres en smule mer kompakt:

namespace e811808
{
    class Program
    {
        public static DateTime D(int month, int day)
        {
            DateTime dt = new DateTime(DateTime.Now.Year, month, day);
            if (dt < DateTime.Today) dt = dt.AddYears(1);
            return dt;
        }

        public static void Main(string[] args)
        {
            Console.WriteLine(D(12, 26));
            Console.WriteLine(D(12, 24));
            Console.ReadKey();
        }
    }
}
Avatar billede nickbuus Nybegynder
26. december 2007 - 09:26 #3
tak for hjælpen begge - i kan dele pointene
Avatar billede nielle Nybegynder
26. december 2007 - 09:29 #4
Naah, lad bare arne få dem. Ellers tak for tilbudet. :^)

Forresten, kan koden kondenseres lidt mere:

        public static DateTime D(int month, int day)
        {
            DateTime dt = new DateTime(DateTime.Now.Year, month, day);
            return (dt < DateTime.Today) ? dt.AddYears(1) : dt;
        }
Avatar billede arne_v Ekspert
26. december 2007 - 16:15 #5
svar fra mig
Avatar billede arne_v Ekspert
26. december 2007 - 16:16 #6
nielle>

Der er faktisk en forskel på min og din kode. Prøv og test på 2 29.
Avatar billede nielle Nybegynder
26. december 2007 - 20:11 #7
arne_v>

Tja, det har du unægtelig ret i. Men den fejl er vi vist lige gode om:

Min version fejler hvis man gør det i år
Din version fejler hvis man gør det samme næste år.

nickbuus>

Hvad skal der egentlig ske mht. skudår og datoen 29/2 ?
Avatar billede arne_v Ekspert
26. december 2007 - 22:06 #8
Hvis man 26. december 2008 beder om 29. februar det næste år er Exception
vel en oplagt løsning.
Avatar billede nielle Nybegynder
26. december 2007 - 22:36 #9
Det er muligt at vi kan blive enige om det. Dog vil jeg hævde at opgaven, som den er stillet, ikke specificere hvad der faktisk skal ske.

Men hvis der skal smides en exception, er den kastede System.ArgumentOutOfRangeException vist ikke den naturlige exception. Den burde catches og enten throwes som en System.ArgumentException eller som en custom-exception som specificere hvad problemet præcist var.
Avatar billede nickbuus Nybegynder
27. december 2007 - 14:16 #10
fejlen kommer ikke til at opstå fordi jeg scraper dataen fra et site. De har formentlig styr på ikke at have en post som er sat til at ske d. 29/2 hvis der ikke er skudår.
Avatar billede nielle Nybegynder
27. december 2007 - 18:01 #11
Sådan en post kan de sagtens have i det kommende år. Den vil være lovlig frem til og med slutningen af februar. Derefter vil den foroversage en fejl.
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