Avatar billede Slettet bruger
16. april 2008 - 12:19 Der er 23 kommentarer og
1 løsning

DateTime.Parse-fejl

Hejsa!

Jeg får ved denne linje kode
if (DateTime.Now.Ticks >= DateTime.Parse("634421553176875000").Date.AddDays(-14).Ticks)
følgende fejl:

System.FormatException was unhandled
  Message="String was not recognized as a valid DateTime."
  Source="mscorlib"
  StackTrace:
      at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
      at System.DateTime.Parse(String s)
      at ToDo.Data.UpdateNotes() in C:\Documents and Settings\Toke\Dokumenter\[PRIVAT]\C#\ToDo\ToDo\Data.cs:line 41
      at ToDo.Form_Main.MainForm_Load(Object sender, EventArgs e) in C:\Documents and Settings\Toke\Dokumenter\[PRIVAT]\C#\ToDo\ToDo\Form_Main.cs:line 22
      at System.Windows.Forms.Form.OnLoad(EventArgs e)
      at System.Windows.Forms.Form.OnCreateControl()
      at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
      at System.Windows.Forms.Control.CreateControl()
      at System.Windows.Forms.Control.WmShowWindow(Message& m)
      at System.Windows.Forms.Control.WndProc(Message& m)
      at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      at System.Windows.Forms.ContainerControl.WndProc(Message& m)
      at System.Windows.Forms.Form.WmShowWindow(Message& m)
      at System.Windows.Forms.Form.WndProc(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      at System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
      at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
      at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
      at System.Windows.Forms.Control.set_Visible(Boolean value)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.Run(Form mainForm)
      at ToDo.Program.Main() in C:\Documents and Settings\Toke\Dokumenter\[PRIVAT]\C#\ToDo\ToDo\Program.cs:line 18
      at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
      at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      at System.Threading.ThreadHelper.ThreadStart()
  InnerException:

Altså: Den kan ikke parse "634421553176875000". Hvorfor ikke?
Avatar billede jokkejensen Novice
16. april 2008 - 12:27 #1
Hvis det er ticks skal det vist være en long, og ikke en string.

/JJ
Avatar billede jokkejensen Novice
16. april 2008 - 13:47 #2
altså noget ala:

long test = 634421553176875000;

if (DateTime.Now.Ticks >= DateTime.Parse(test).Date.AddDays(-14).Ticks)
Avatar billede jokkejensen Novice
16. april 2008 - 13:51 #3
long test = 634421553176875000;
        DateTime dt = new DateTime(test);
        Response.Write(dt.DayOfWeek);

Det fungere i hvert fald.
Avatar billede lasserasch Juniormester
16. april 2008 - 14:45 #4
Lige en sidekommentar her fra højrefløjen :

Systemet tror at den bliver bedt om at konvertere en string til et datetime format.
Hvis du skulle have brugt den metode, så skulle det have set sådan her ud :

DateTime.Parse("01-01-2008 10:00:00")

/Lasse
Avatar billede kalp Novice
16. april 2008 - 15:05 #5
Du skal benytte DateTime.ParseExact
Avatar billede Slettet bruger
16. april 2008 - 17:31 #6
Hm. Lige et sekund.
Avatar billede Slettet bruger
16. april 2008 - 17:35 #7
Nej, jokkejensen, det virker IKKE. Den siger, at den forventer en String og ikke en long.
kalp, hvordan skal jeg bruge den?
Avatar billede Slettet bruger
16. april 2008 - 17:36 #8
Error    2    C:\Documents and Settings\Toke\Dokumenter\[PRIVAT]\C#\ToDo\ToDo\Data.cs    41    Argument '1': cannot convert from 'long' to 'string'
Avatar billede lasserasch Juniormester
16. april 2008 - 21:27 #9
kalp -> ParseExact kan da ikke tage tage ticks som parameter?


Dette virker :

            long test = 634421553176875000;
            if (DateTime.Now.Ticks >= new DateTime(test).Date.AddDays(-14).Ticks)


/Lasse
Avatar billede Slettet bruger
16. april 2008 - 21:29 #10
Logisk med en numerisk værdi som argument :) Kikker lige på det, når jeg har læst lektier... Suk. Hvad skal jeg med dansk og kemi?!
Avatar billede Slettet bruger
16. april 2008 - 22:40 #11
Virker perfekt :) Mange tak. Bare smid et svar.
Avatar billede Slettet bruger
16. april 2008 - 22:53 #12
Jeg har forresten et andet lille spørgsmål:
Hvordan tilføjer jeg et element til MonthCalendar.BoldedDates?
Avatar billede Slettet bruger
16. april 2008 - 23:02 #13
... og hvordan rydder jeg BoldedDates? Clear() virker ikke.
Avatar billede kalp Novice
16. april 2008 - 23:15 #14
et bud

MonthCalendar.BoldedDates = null;
MonthCalendar.Refresh();
Avatar billede kalp Novice
16. april 2008 - 23:16 #15
boldeddates er bare et DateTime array du skal assigne til den.
Avatar billede lasserasch Juniormester
16. april 2008 - 23:24 #16
Ok, hermed svar.

Det er rigtig som kalp siger. Det er et datetime array.

Du kan definere datoerne sådan her :

            System.DateTime[] BoldedDates = new DateTime[]
            {
            new System.DateTime(2008, 4, 16, 0, 0, 0, 0),
            new System.DateTime(2008, 4, 17, 0, 0, 0, 0),
            new System.DateTime(2008, 4, 18, 0, 0, 0, 0),
            new System.DateTime(2008, 4, 19, 0, 0, 0, 0)
            };
           
            monthCalendar1.BoldedDates = BoldedDates;

For at clere dem skal du sætte værdien til null. Man behøver ikke at refreshe...

/Lasse
Avatar billede Slettet bruger
17. april 2008 - 08:22 #17
Mange tak :) Men hvad gør jeg så, hvis jeg har brug for at tilføje værdier i en løkke?
Avatar billede kalp Novice
17. april 2008 - 20:28 #18
hvis du ikke kender størrelsen af dit array så kan du smide dem ind i en anden collection med dynamisk størrelse først
Avatar billede Slettet bruger
17. april 2008 - 21:20 #19
Ah. Selvfølgelig. Mange tak :)
Hvad er det nu, funktionen til at ændre fra f.eks. List<> til Array hedder?
List<DateTime>.ToArray()?
Avatar billede kalp Novice
17. april 2008 - 21:22 #20
exactly;)
Avatar billede Slettet bruger
18. april 2008 - 21:45 #21
i r teh genius... eller noget.
Mange tak :)
Avatar billede Slettet bruger
19. april 2008 - 22:04 #22
Det virker =)
Bare smid et svar.
Avatar billede kalp Novice
20. april 2008 - 07:05 #23
behøver ikke point og der er desuden allerede afgivet point i denne tråd;)
Avatar billede Slettet bruger
20. april 2008 - 10:31 #24
Hvad f...
Nå. Hænderne hurtigere end den retarderede bruger.
Lukket ^^
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