首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#无法将获取错误字符串识别为有效

使用c#无法将获取错误字符串识别为有效
EN

Stack Overflow用户
提问于 2021-03-23 11:33:11
回答 2查看 83关注 0票数 0

当我试图改变日期格式从csv文件3/1/2021-3/31/2021到3月-01-2021-3月-31-2021获得错误,请帮助我解决这个问题。

代码语言:javascript
复制
                       foreach (DataRow dr in dtDataTable.Rows)
        {
            for (int i = 0; i < dtDataTable.Columns.Count; i++)
            {
                if (ListInputDateColumns.Contains(dtDataTable.Columns[i].ColumnName))
                {
                    if(dtDataTable.Columns[i].ColumnName == "Period")
                    {
                        sw.Write(dr[i] = Convert.ToDateTime(dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).ToString("MMM-dd-yyyy-MMM-dd-yyyy"));//Here i am getting error
                    }
                    else
                    {
                        sw.Write(dr[i] = Convert.ToDateTime(dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).ToString("MMM-dd-yyyy hh:mm:ss tt"));
                    }
                    //sw.Write(dr[i].ToString());
                }
                else
                {
                    sw.Write(dr[i].ToString());
                }
                //sw.Write(dr[i].ToString());
                sw.Write(",");
            }
            sw.Write(sw.NewLine);
        }
        sw.Close();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-23 11:44:05

您必须解析该字符串,将其拆分为分隔符,然后将每个令牌解析为DateTime。然后,您可以将其转换为具有所需格式的字符串:

代码语言:javascript
复制
string targetFormat = "MMM-dd-yyyy";
string s = " 3/1/2021-3/31/2021";
string[] tokens = s.Split('-');
if(tokens.Length == 2)
{
    bool validFrom = DateTime.TryParse(tokens[0], CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime fromDate);
    bool validTo = DateTime.TryParse(tokens[1], CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime toDate);
    if (validFrom && validTo)
    {
        string result = $"{fromDate.ToString(targetFormat, CultureInfo.InvariantCulture)}-{toDate.ToString(targetFormat, CultureInfo.InvariantCulture)}";           
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-23 11:59:47

好的,如果你愿意的话,我们可以用一行代码来做这件事,但就可读性而言,它会变得很难看。对于一个班轮,只需更改这一行:

sw.Write(dr[i] = Convert.ToDateTime(dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).ToString("MMM-dd-yyyy-MMM-dd-yyyy"));//Here i am getting error

sw.Write(dr[i] = Convert.ToDateTime((dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).Substring(0, (dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).IndexOf('-'))).ToString("MMM-dd-yyyy") + "-" + Convert.ToDateTime((dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).Substring((dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).IndexOf('-') + 1)).ToString("MMM-dd-yyyy");

但是对于可维护性,我建议创建一个快速的方法来解析“周期”,如下所示

string ParsePeriod(string period)

{

DateTime from = Convert.ToDateTime(period.Substring(0, period.IndexOf('-')));

DateTime to = Convert.ToDateTime(period.Substring(period.IndexOf('-') + 1));

return from.ToString("MMM-dd-yyyy") + "-" + to.ToString("MMM-dd-yyyy");

}

然后用这样的方式来称呼它:

sw.Write(dr[i] = Convert.ToDateTime(dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()]).ToString("MMM-dd-yyyy-MMM-dd-yyyy"));//Here i am getting error

对此:

sw.Write(dr[i] = ParsePeriod(Convert.ToString(dtDataTable.Rows[i][dtDataTable.Columns[i].ColumnName.ToString()])));

我相信这能解决你的问题。;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66762323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档