2016-08-19 2 views
0

Ich habe eine sehr einfache Methode, die eine Zeichenfolge nimmt, bricht sie in ein Char-Array, dann erstellt eine neue Zeichenfolge aus den Stücken. Aber es funktioniert unerwartet und ich verstehe nicht warum? Hier ist ein Bild des Haltepunkts. Der Eingabe-String ist in diesem Fall "20160622".Versuchen, seltsames String-Verkettungsverhalten zu verstehen

Bearbeiten: Sorry für das Bild. Hier ist die Frage im Text.

internal class Program 
    { 
     private static void Main() 
     { 
      string test = "20160622"; 
      Console.WriteLine(ConvertDateField(test)); 
      Console.ReadKey(); 
     } 

     private static string ConvertDateField(string date) 
     { 
      var temp = date.ToCharArray(); 
      var output = temp[0] + temp[1] + temp[2] + temp[3] + "-" + temp[4] + temp[5] + "-" + temp[6] + temp[7] + " 00:00:00"; 

      return output; 
     } 
    } 

Der Ausgang ist "201-06-22 00:00:00".

Edit 2: Ich verstehe, es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun. Ich versuche zu verstehen, warum dieser Code so funktioniert, wie er ist. dh. Warum ist die 6 der einzige Char, der nicht verkettet wird?

enter image description here

Wie Sie sehen können, das vierte Zeichen, Temperatur [3], die eine ‚6‘ ist, wird nicht in die Ausgabezeichenfolge verkettet werden. Warum?

Bearbeiten 3: Ich löste das Problem auf diese Weise

private static string ConvertDateField(string date) 
    { 
     return DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd 00:00:00"); 
    } 

Sie Steve für Ihren Rat danken.

+2

Bitte schreiben Sie einen [mcve] mit dem Code und geben Sie ihn als * Text * anstatt als Screenshot aus. Grundsätzlich klingt es jedoch so, als müsste man den Wert analysieren und neu formatieren. –

+0

Scheint wie eine wirklich seltsame und schlechte Art, ein Datum zu formatieren. Verwenden Sie DateTime.TryParse mit der Formatzeichenfolge, um das Datum in ein DateTime-Objekt zu analysieren, und verwenden Sie anschließend ToString() mit einer Formatzeichenfolge, um es wie gewünscht auszugeben. – SledgeHammer

+0

was ist mit den ganzen Stimmen unten. Ich verstehe es nicht. Ich konnte das Problem nicht herausfinden, ohne es tatsächlich in einem Debugger auszuprobieren. Für Anfänger natürlich. – Steve

Antwort

6

Für Ihre Frage. Der Char Concat ist kein String Concat. Was passiert ist, ist, dass C# Math-Operationen für die Zeichen ausführt, indem sie sie mit ASCII in int umwandeln.

Die entsprechende ASCII- für Temp 1, 2, 3, 4 sind 50, 48, 49, 54, die die Summe 201 (was für einen Zufall) ist

und dann int + string concat in string führte die so übrige Die Zeichenfolge funktionierte wie erwartet.

Es gibt eine einfachere Möglichkeit, die Konvertierung durchzuführen, wenn es sich um ein DateTime-Objekt handelt. Sie können einfach dateTime.ToString("yyyy-MM-dd 00:00:00") anrufen und Sie erhalten das gewünschte Ergebnis.

+3

Guter Fang, und was für ein irreführender Zufall. – hatchet

Verwandte Themen