[英]How to convert dates without getting 'String was not recognized as a valid DateTime.'-error?
我正在尝试使用以下代码将日期转换为例如 30/12/2000 到 2000-12-30:
System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
DateTime.ParseExact(row.Cells[6].ToString(), "yyyy-MM-dd", enUS);
但我收到了这个错误:
String was not recognized as a valid DateTime.
有人可以帮助我吗,在此先感谢您。
您可以使用DateTime.TryParse()
function 并检查结果是真还是假。
因此,您可以尝试使用指定格式解析日期,如果不正确,请尝试另一种格式,依此类推...
你得到这个的原因与异常所说的完全一样,字符串格式不正确,原因很可能是进行比较的机器与 yyyy-MM-dd 的日期时间设置不同。
如果您从数据库中检索它并且返回值是日期时间(或者如果您知道 row.Cells[6] 是 DateTime 字段,则以下内容应该有效:
System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
if (row.Cells[6] != null)
DateTime.ParseExact(((DateTime)row.Cells[6]).ToString("yyyy-MM-dd"), "yyyy-MM-dd", enUS);
但是,问题是您为什么要更改格式,将其显示在表单上,如果是这样,则可以按如下方式显示:
if (row.Cells[6] != null)
TextBox1.Text = ((DateTime)row.Cells[6]).ToString("yyyy-MM-dd");
编辑鉴于 row.Cells[6] 是一个字符串,您将始终必须知道字符串的格式是什么,如果您这样做,那么它会很简单:
随着时间的推移:
DateTime ParsedDate = DateTime.ParseExact(row.Cells[6].ToString(), "dd-MM-yyyy h:mm", enUS);
删除时间然后解析:
DateTime ParsedDate = DateTime.ParseExact(row.Cells[6].ToString().Substring(0,10), "dd/MM/yyyy", enUS);
然后到 output 它以您想要的格式简单如下:
TextBox1.Text = ParsedDate.ToString("yyyy-MM-dd");
您指定的是 en-US CultureInfo
object,但 30/12/2000 不是正确的美国日期格式
试试这个可能会解决您的问题
String oldScheduledDate = "16-05-2011";
DateFormat oldFormatter = new SimpleDateFormat("dd/MM/yyyy");
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
try
{
Date oldDate = (Date)oldFormatter .parse(oldScheduledDate);
}
Catch(Exception ex ) { /// process exception}
System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
try {
DateTime.ParseExact(row.Cells[6].ToString(), "yyyy-MM-dd", enUS);
}
catch (FormatException) {
...your code instead of error...
}
我相信问题出在你的第二个参数上。 如果您将 30/12/200 作为输入传递,它将失败,因为第二个参数期望它用破折号分隔。
利用
System.Globalization.CultureInfo.InvariantCulture
DateTime.ParseExact(((DateTime)row.Cells[6]).ToString("yyyy-MM-dd"), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture)
;
你忘记了小时/分钟:
从数据库中它是这样的(转换为字符串)“12/05/2011 0:00”
DateTime.ParseExact(theCellValue, "MM/dd/yyyy HH:mm", enUS).ToString("yyyy-MM-dd")
创建你想要的字符串,但它完全愚蠢。 您应该确保首先按照您的需要格式化日期时间。 (那么你永远不必解析它)
如果您的源字符串在 dd/MM/yyyy 中,那么您不应该使用美国文化 (MM/dd/yyyy) 来解析字符串。
System.Globalization.CultureInfo enGB = new System.Globalization.CultureInfo("en-GB");
DateTime temp = DateTime.ParseExact(row.Cells[6].Text, "dd/MM/yyyy", enGB);
row.Cells[6] = temp.ToString("yyyy-MM-dd");
把它放在网格的 RowDataBound 事件中。
我通过使用修复它
Convert.ToDateTime(row.Cells[6].Text)
看看它有多简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.