Avatar billede califfo Nybegynder
27. februar 2006 - 16:40 Der er 16 kommentarer og
1 løsning

Test om værdi er gyldig tidsenhed

Hej gutter

En et hjørne af mit program skal jeg teste om en indtastet værdi er en gyldig tidsenhed. Altså:

12:45 = gyldig
12:65 = ugyldig

Det burde være meget nemt at lave. Jeg har her først lavet et array med værdierne for timer og minutter og tester så om den indstastede værdi, svarer til en værdi i array'et og smider derefter en fejlmeddelelse ud hvis ikke det er tilfældet. Jeg får dog en fejlmeddelelse når jeg builder. Er der nogen der kan se hvad der er galt?


            int[] hour =  { 0 - 23 };
            int[] minute = { 0 - 59 };
            if (int.Parse(time.Split(seperator)[0]) != hour ||
                int.Parse(time.Split(seperator)[1]) != minute)
            {
                Gør-et-eller-andet;
                return;
            }
Avatar billede thomasabcd Nybegynder
27. februar 2006 - 16:57 #1
hej.

Jeg ville nok gøre noget a la:
try
{
  DateTime tempDateTime = Convert.ToDateTime(din variabel);
return tempDateTime;
}
catch(Exception ex)
{
return null;
}

evt:
try
{
  DateTime tempDateTime = Convert.ToDateTime(din variabel);
return true;
}
catch(Exception ex)
{
return false;
}
Avatar billede Syska Mester
27. februar 2006 - 18:13 #2
Eller......
DateTime outParam;
if (DateTime.TryParse("21-08-83", out outParam))
{
    MessageBox.Show(outParam.ToLongDateString());
}
else
{
    MessageBox.Show("Kunne ikke convert");
}

// ouT
Avatar billede www.jakub.dk Nybegynder
27. februar 2006 - 21:17 #3
Jeg vil holde mig væk fra try - catch til at validere med. Det koster mere end f. eks en if - then konstruktion.
Men hvis du er ligeglad med effektivitetten så er det meget simpelt at implementere!

Mit forslag:

String[] strTime = time.Split(seperator);
int iHour=-1,iMinute=-1;
try
{
iHour = int.Parse(strTime[0]);
iMinute = int.Parse(strTime[1]);
}
catch { return false; }
if (iHour>=0 && iHour<24)
{
if (iMinute>=0 && iMinute<60)
{
  return true;
}
}
return false;

Fejlen i din kode består i at du prøver at sammenligne en int og et array. Det kan compileren ikke lide!
Avatar billede Syska Mester
27. februar 2006 - 21:32 #4
DateTime outParam;
string[] test = new string[] { "12:65", "12:45" };

foreach(string s in test)
{
    if (DateTime.TryParse(s, out outParam))
    {
        MessageBox.Show(outParam.ToLongTimeString());
    }
    else
    {
        MessageBox.Show("Kunne ikke convert");
    }
}

Ville stadig holde mig til de indbygede ting........

// ouT
Avatar billede Syska Mester
27. februar 2006 - 21:36 #5
ups, det stadig skulle ikke have været med.... lyder lidt som om jeg beskylder nogen i tråden for noget, og det er bestemt ikke meningen.....

// ouT
Avatar billede www.jakub.dk Nybegynder
28. februar 2006 - 12:12 #6
bare roligt... jeg kan tage det
Avatar billede thomasabcd Nybegynder
28. februar 2006 - 12:13 #7
også mig
Avatar billede www.jakub.dk Nybegynder
28. februar 2006 - 12:14 #8
Jeg synes bare at når det er et så simpelt problem, så er Parsing måske lidt for voldsomt, men det afhænger selfælgeligt af det store billede.
Avatar billede califfo Nybegynder
28. februar 2006 - 13:35 #9
...Damn,... Har ikke lige fået fulgt med. Sorry. Jeg skal lige teste jeres input, så skriv venligst ikke flere før jeg skriver igen.

Indtil videre tusind tak. Vender tilbage snarest.
Avatar billede califfo Nybegynder
28. februar 2006 - 15:17 #10
Hej gutter

Jeg har også fået input fra en ven og jeg har valgt at bruge hans forslag.

I kan se hvad det endte med her:

-----

            DateTime SelectedDay = monthCalendar1.SelectionStart.Date;
            string time = Hour_maskedTextBox.Text;

            char[] seperator = new char[1];
            seperator[0] = ':';

            int hour = int.Parse(time.Split(seperator)[0]);
            int min = int.Parse(time.Split(seperator)[1]);

            if (hour < 0 || hour > 23 || min < 0 || min > 59)
            {
            Gør en masse vilde ting;
            }

-----

Jeg er dog meget taknemmelig for jeres hjælp og vil gerne smide point til jer alle 3. Kast et svar alle 3, så er de ...vildt mange point,... jeres.
Avatar billede thomasabcd Nybegynder
28. februar 2006 - 15:38 #11
Hej Califfo,

du behøves ikke smide point til mig. Det er jo ok, at der findes en verden udenfor Eksperten :-)
Avatar billede Syska Mester
28. februar 2006 - 16:12 #12
char[] seperator = new char[] {':'};
burde vist også virke, så kan du springe 1 linje over i det du  bruger....

men her kommer et svar

// ouT
Avatar billede califfo Nybegynder
28. februar 2006 - 20:24 #13
>>thomasabcd

Enig og hvor er det fedt. Det er indimellem ret behageligt at man oplever hjælpsomme mennesker. Specielt her i DK i denne tid hvor tegnere, labaner og Pia'er ødelægger det for alle os andre.
Avatar billede www.jakub.dk Nybegynder
01. marts 2006 - 07:49 #14
Prøv med:
-----

            DateTime SelectedDay = monthCalendar1.SelectionStart.Date;
            string time = Hour_maskedTextBox.Text;

            char seperator = ':';

            int hour = int.Parse(time.Split(seperator)[0]);
            int min = int.Parse(time.Split(seperator)[1]);

            if (hour < 0 || hour > 23 || min < 0 || min > 59)
            {
            Gør en masse vilde ting;
            }

-----

Behøves ingen point... God fornøjelse
Avatar billede Syska Mester
01. marts 2006 - 16:58 #15
øhhh, er det ikke bare en repost af califfo post eller mig der ikke kan se forskellen?

// ouT
Avatar billede www.jakub.dk Nybegynder
01. marts 2006 - 20:52 #16
jo næsten...
Avatar billede Syska Mester
01. marts 2006 - 21:32 #17
ahhh, den linie med char :-)

// ouT
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