Announcement

Collapse
No announcement yet.

2008-04-17 in DaterTime Objekt umwandeln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 2008-04-17 in DaterTime Objekt umwandeln

    Hallo

    Ich lese aus einem XML Dokument einen String. Dieser sieht so aus:
    2008-04-17

    Diesen String möchte ich in ein DateTime Objekt umwandeln.
    Wie kann ich das am besten machen?

    Danke für Eure Hilfe
    Stefan

  • #2
    Hi Stefan,

    aus dem Kopf sag' ich mal :

    Code:
    DateTime dt = DateTime.ParseExact("2008-04-17", "yyyy-MM-dd", CultureInfo.InvariantCulture)
    HTH,
    Karsten

    Comment


    • #3
      Hallo Stefan,

      Karsten hat recht. Schau in die SDK-Doku, welche Variante von DateTime.TryParse oder TryParseExact sowie XmlConvert.ToDateTime Deinen Bedürfnissen am besten entspricht.

      Jürgen

      Comment


      • #4
        Danke für Eure Hilfe

        Ich bekomme leider immer:

        System.FormatException wurde nicht von Benutzercode behandelt.
        Message="String was not recognized as a valid DateTime."
        Source="mscorlib"
        StackTrace:
        at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
        at System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style)
        at System.Xml.XmlConvert.ToDateTime(String s, String format)
        at Urlaubsantrag.FormCode.Workdaycount()
        at Urlaubsantrag.FormCode.End_Changed(Object sender, XmlEventArgs e)
        at Microsoft.Office.InfoPath.Internal.XmlEventHost.Ge nericProxy(Object genericDelegate, DataDOMEvent dataDOMEvent, InfoPathEvents type)
        at Microsoft.Office.InfoPath.Internal.XmlEventHost.Ch angedProxy(DataDOMEvent dataDOMEvent)
        at Microsoft.Office.Interop.InfoPath.SemiTrust._DataD OMEventSink_SinkHelper.OnAfterChange(DataDOMEvent pDataDOMEvent)

        als Fehlermeldung.

        Comment


        • #5
          Dann zeig' doch mal bitte Deinen Quelltext...

          Bekommst Du auch die gleiche Fehlermeldung, wenn Du nur die eine Zeile von mir im vorherigen Post ausführst?

          Karsten

          Comment


          • #6
            int workcount = 0;
            int N = 0;
            DateTime Anfang;
            DateTime Ende;
            XPathNavigator xml = this.MainDataSource.CreateNavigator();

            Anfang=Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:Start", NamespaceManager).Value);
            Ende = Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:End"
            , NamespaceManager).Value);


            while (Anfang.AddDays(N) < Ende.AddDays(1))
            {
            Boolean Test = ((Anfang.AddDays(N).DayOfWeek == DayOfWeek.Sunday) ||
            (Anfang.AddDays(N).DayOfWeek == DayOfWeek.Saturday));

            if (Test == false)
            {
            workcount = workcount + 1;
            }
            N = N + 1;
            }


            xml.SelectSingleNode("/my:Urlaubsantrag/my:Workdaycount",NamespaceManager).SetValue((workc ount).ToString());

            Comment


            • #7
              Der Fehler tritt immer auf.

              Nutze ich .Net Felder anstatt eines InfoPath Forumlars geht es ohne Probleme.

              Aber ich benötige das Formular.

              Danke für Eure Hilfe
              Stefan

              Comment


              • #8
                Anfang=Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:Start", NamespaceManager).Value);

                Ende = Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:End"
                , NamespaceManager).Value);


                in diesen beiden Zeilen tritt der Fehler auf. Sobald ein Wert ankommt.

                Comment


                • #9


                  hab' ich jetzt etwas verpasst? Wo ist denn DateTime.ParseExact o.ä. ?

                  Ich seh' hier nur
                  Originally posted by Stefan3110 View Post
                  Anfang=Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:Start", NamespaceManager).Value);
                  Ende = Convert.ToDateTime(xml.SelectSingleNode("/my:Urlaubsantrag/my:End"
                  , NamespaceManager).Value);
                  und da kracht es halt...

                  Hast Du die einzelne Zeile von meinem (mittlerweile) vorletztem Posting mal ausprobiert?

                  Karsten

                  Comment


                  • #10
                    Ich versuchte es aber es gab das selbe Resultat. Wobei es aber sein kann das ich es nicht exakt anwendete ich suche noch in den Dokus.

                    Comment


                    • #11
                      Wenn ich Xmlconvert kommit immer folgende Warnung und es kracht

                      "System.Xml.XmlConvert.ToDateTime(string)" ist veraltet: "Use XmlConvert.ToDateTime() that takes in XmlDateTimeSerializationMode"

                      Danke für Eure Hilfe und Mühe

                      Comment


                      • #12
                        Karsten kannst Du mal bitte mir zeigen wie Du den Code ändern würdest so das er nicht kracht? Danke

                        Viele Grüße
                        Stefan

                        Comment


                        • #13
                          Hallo Stefan,

                          Rumtata hat recht: Am Anfang hast Du mit DateTime.TryParse oder TryParseExact sowie XmlConvert.ToDateTime drei Vorschläge bekommen; ich habe ausdrücklich darauf hingewiesen, dass es Varianten gibt, bei denen Du das erwartete Format angeben kannst. Also musst Du in der SDK-Doku die Beschreibungen der Varianten durchlesen. Nochmals: Suche etwas, wo Du Dein Format angeben kannst!

                          Auch bei der XmlConvert-Methode gibt es Varianten, die nicht veraltet sind.

                          Es hat auch seinen Grund, warum niemand Convert.ToDateTime vorgeschlagen hat: Die Methoden der Convert-Klasse erwarten in aller Regel einen String mit dem "richtigen" Format, und das ist bei einem deutschen PC nunmal ein deutsches Datumsformat. Wenn das nicht vorliegt, knallt es eben - also: Convert-Klasse möglichst nicht benutzen! Mit Parse, TryParse, TryParseExact kommt man besser ans Ziel.

                          Übrigens gibt es einen "Editieren"-Button: Du kannst Deinen letzten Beitrag überarbeiten und musst nicht alle zwei Minuten einen neuen schreiben.

                          Jürgen

                          Comment


                          • #14
                            Also, zuerst solltest Du sicherstellen, dass Dir
                            Code:
                            xml.SelectSingleNode("/my:Urlaubsantrag/my:Start", NamespaceManager).Value
                            wirklich nur etwas im Format "2008-04-17" zurück gibt.
                            Anschließend ist das ganze eigentlich nicht schwierig :
                            Code:
                            String s = xml.SelectSingleNode("/my:Urlaubsantrag/my:Start", NamespaceManager).Value;
                            MessageBox.Show( s );
                            DateTime Anfang = DateTime.ParseExact( s, "yyyy-MM-dd", CultureInfo.InvariantCulture)
                            Ich hab' das mal in zwei Schritte getrennt, damit es besser debuggt werden kann.
                            Das sollte jetzt aber laufen.

                            Gruß, Karsten

                            Comment

                            Working...
                            X