我试过
protected void gridCustomer_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime olddate = Convert.ToDateTime(e.Row.Cells[9].Text);
// Error : String was not recognized as a valid DateTime./ 'DateTime today = DateTime.Now;'
if (olddate > today)
{
Label status = (Label) e.Row.FindControl("lblStatus");
status.Text = "AutoHold";
}
}
}
答案 0 :(得分:1)
Convert.ToDateTime
method作为第二个参数, CurrentCulture
会默认使用您的IFormatProvider
设置 。
这意味着,您的CurrentCulture
没有yyyy-MM-dd
作为standard date and time format.
在这种情况下,您可以使用DateTime.TryParseExact
或DateTime.ParseExact
方法指定字符串格式;
DateTime olddate;
if(DateTime.TryParseExact(e.Row.Cells[9].Text, "yyyy-MM-dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out olddate))
{
// Your olddate will be 28/03/2015 00:00:00
}
但在旧日期获得'1/1/0001',就像在我的网格单元格中一样 '4/1/2015',高于您提到的代码。
显然,您的4/1/2015
与yyyy-MM-dd
格式不符,这就是为什么您的olddate
将是DateTime
的默认值DateTime.MinValue
( 1/1/0001)
。
如果您的字符串可以是多种格式,DateTime.TryParseExact
has an overload将格式作为字符串数组。有了它,您可以指定字符串的所有可能格式。
例如;
string s = "4/1/2015";
DateTime dt;
var formats = new string[]{"yyyy-MM-dd", "M/d/yyyy"};
if(DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
// Your dt will be 01/04/2015 00:00:00
}
答案 1 :(得分:0)
使用:
CultureInfo provider = CultureInfo.InvariantCulture;
dateString = "2015-03-28";
format = "yyyy-MM-dd";
try {
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
Console.WriteLine("{0} is not in the correct format.", dateString);
}
答案 2 :(得分:0)
使用DateTime.ParseExact
string res = "2012-07-08";
DateTime d = DateTime.ParseExact(res, "yyyy-MM-dd", CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString("MM/dd/yyyy")); // can set any format
答案 3 :(得分:0)
在代码中替换此行
DateTime olddate = DateTime.ParseExact(e.Row.Cells[9].Text, "yyyy-MM-dd", CultureInfo.InvariantCulture);
如果当前文化与日期时间字符串格式存在差异, Convert.ToDateTime
将抛出异常