首页 > 解决方案 > 使用 string.Insert 使用 ForEach 循环格式化日期字符串

问题描述

我正在努力将这些字符串更改为这种格式 yyyy-mm-ddhh:mm:ss

我将字符串放入一个数组中,将其输入到每个循环中的四个循环中,在该循环中我使用 Insert() 函数在适当的位置添加“-”和“:”,但它仍在打印出原始字符串。

    static void Main(string[] args)
    {
        string[] dates =  { "20190127144251", "20190127123315", "20190127035942" };

        foreach (string i in dates)
        {
            string str = i;
            str.Insert(3, "-");
            str.Insert(5, "-");
            str.Insert(7, "-");
            str.Insert(9, ":");
            str.Insert(11, ":");


            Console.WriteLine(i);

        }


    }
}

打印出原始字符串,未格式化

标签: c#foreach

解决方案


首先,您没有存储.Insert()调用的结果。字符串是不可变的,对它们的修改没有到位,而是返回新修改的字符串。将结果放入变量中:

str = str.Insert(3, "-");
// etc.

其次,您输出i的是str. 输出你正在修改的那个:

Console.WriteLine(str);

第三,您可以通过将字符串解析为实际DateTime格式化其输出来跳过所有这些:

foreach (string i in dates)
{
    var dt = DateTime.ParseExact(i, "yyyyMMddhhmmss");
    Console.WriteLine(dt.ToString("yyyy-MM-dd-hh:mm:ss"));
}

这为您提供了更清晰的代码和更清晰的意图,而不是计算字符串索引和插入单个字符。


推荐阅读