2016-08-19 110 views
0

我有一個非常簡單的方法,它接受一個字符串,將其分解爲一個char數組,然後從這些數據塊中創建一個新的字符串。然而,它表現出色,我不明白爲什麼?這是一張斷點圖片。這種情況下的輸入字符串是「20160622」。試圖理解奇怪的字符串連接行爲

編輯:對不起,圖片。這是文中的問題。

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; 
     } 
    } 

輸出是「201-06-22 00:00:00」。

編輯2:我知道有可能有更好的方法來做到這一點。我試圖理解的是爲什麼這段代碼運行的方式。即。爲什麼6是唯一沒有連接的字符?

enter image description here

正如你可以看到,第四字符,溫度[3]其是「6」,沒有被連接成輸出串。爲什麼?

編輯3:我的問題解決了這樣

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

謝謝你史蒂夫的建議。

+2

請發佈[mcve]代碼並輸出爲* text *而不是截圖。從根本上說,這聽起來像你應該解析價值並重新格式化它。 –

+0

看起來像一個非常奇怪和壞的方式來格式化日期。使用帶有格式字符串的DateTime.TryParse將日期解析爲DateTime對象,然後使用帶有格式字符串的ToString()將其輸出爲您想要的樣式。 – SledgeHammer

+0

什麼是所有的反對票。我不明白。如果沒有在調試器中嘗試它,我無法弄清楚問題所在。不用說對於初學者。 – Steve

回答

6

對於你的問題。 char concat不是字符串concat。發生了什麼事是,C#正在爲字符做數學運算,通過將它們用ASCII轉換爲int。

對於臨時1,2,3對應的ASCII,4是50,48,49,54,其總和爲201(真巧)

然後int + string的concat導致串所以剩下的該字符串按預期工作。

如果它是一個DateTime對象,有一種更簡單的方法來執行轉換。您只需致電dateTime.ToString("yyyy-MM-dd 00:00:00")即可獲得您想要的結果。

+3

良好的捕捉,以及多麼令人誤解的巧合。 – hatchet