string.substring 我的字符串失败

string.substring fails on my strings

我有以下代码:

string date = dtxt.Substring(5, 2) + @"/" + dtxt.Substring(7, 2) + @"/" + dtxt.Substring(0, 4);

我试图用它解析的文本是 yyyyMMdd。所以从 20150309 我需要 03/09/2015。我不使用 dateTime 格式,因为输入和输出都是字符串。

问题是我得到 ArgumentOutOfRangeExceptionstring.Substring(X, Y) 应该从 X 索引中获取 Y 长度的子字符串,不是吗?

在这种情况下不要使用字符串操作。

将其解析为 DateTime 并使用 .ToString() 方法对其进行格式化;

string s = "20150309";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture).Dump(); //03/09/2015
}

您可以将其转换为 DateTime,然后在 ToString(string format, IFormatProvider provider) 重载的帮助下返回任何字符串表示:

 var result = DateTime.ParseExact(dtxt, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None)
                      .ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);

并且不要忘记在解析时将 CultureInfo.InvariantCulture 作为输入传递。并非所有文化都对日期和十进制货币值使用相同的格式。 不变文化 是一种特殊的文化,您始终可以在任何 .NET 应用程序中使用它。


顺便说一句,您的代码中出现异常的原因是您没有正确找到月份和日期的起始索引。您可以将代码更改为:

string date = dtxt.Substring(4, 2) + @"/" + dtxt.Substring(6, 2) + @"/" + dtxt.Substring(0, 4);

但是,当然不建议像这样对字符串进行操作。