【发布时间】:2016-12-26 23:03:59
【问题描述】:
我有一个非常简单的方法,它接受一个字符串,将其分解为一个 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:我知道可能有更好的方法来做到这一点。我试图理解的是为什么这段代码会以它的方式运行。 IE。为什么 6 是唯一未连接的字符?
如您所见,第四个字符 temp[3] 是一个 '6',并没有被连接到输出字符串中。为什么?
编辑 3:我这样解决了问题
private static string ConvertDateField(string date)
{
return DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd 00:00:00");
}
感谢史蒂夫的建议。
【问题讨论】:
-
请张贴minimal reproducible example 的代码并输出为文本,而不是屏幕截图。但从根本上说,听起来您可能应该解析该值并重新格式化它。
-
似乎是一种非常奇怪和糟糕的日期格式化方式。使用带有格式字符串的 DateTime.TryParse 将日期解析为 DateTime 对象,然后使用带有格式字符串的 ToString() 以您想要的方式输出。
-
所有反对票是怎么回事。我不明白。如果没有在调试器中实际尝试,我无法找出问题所在。初学者不用多说。
-
我怀疑否决票与提问的方式(图像而不是代码等)有关,而不是与问题本身有关。
-
乍一看,您只提供了一个屏幕截图,而且看起来不像人们回答这类问题通常所需的信息量。但是考虑到投票的答案,您显示的功能代码以及给定的输入就足够了。如果您将代码作为文本(在代码块中)包含在内会更好,这样人们就可以自己快速试用您的代码。
标签: c# string debugging char concatenation