2016-08-19 58 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