这不应该被视为一个重复的问题,因为我尝试了在其他地方给出的答案,但它仍然无效。
例如,有了这个:
qr.DateToGenerate = DateTime.ParseExact(crvArray[2], "yyyyMMdd",
CultureInfo.InvariantCulture, DateTimeStyles.None);
...我从here获得,其中crvArray[2]
的值为" 20161201",我得到:
System.FormatException was unhandled
HResult=-2146233033
Message=String was not recognized as a valid DateTime.
Source=mscorlib
StackTrace:
at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
at System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style) . . .
使用以下代码(我从here获得),"尝试"返回false并且没有进行赋值。
if (DateTime.TryParseExact(crvArray[2],
format,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out date))
{
qr.DateToGenerate = date;
}
我需要以什么角度通过篮筐自我发射?
这(传递文字字符串)有效:
qr.DateToGenerate = DateTime.ParseExact("20161201", "yyyyMMdd", null, DateTimeStyles.None);
......但当然不可行。
但是,这不是:
private static QueuedReportsNew ConvertCRVRecordToQueuedReport(string _qrRecord)
{
QueuedReportsNew qr = new QueuedReportsNew();
string[] crvArray = _qrRecord.Split(',');
. . .
String dateToGen = crvArray[2];
. . .
qr.DateToGenerate = DateTime.ParseExact(dateToGen, "yyyyMMdd", null, DateTimeStyles.None);
. . .
......即使crvArray[2]
的价值是" 20170105"
?!
答案 0 :(得分:2)
您的代码很好,我愿意打赌crvArray [2]确实 不包含20170105
。
我的猜测是某处有一个不可打印的角色(例如,一个空格)。如果是这种情况,修剪字符串(crvArray[2].Trim()
)将解决该问题。
答案 1 :(得分:1)
下面的方法在4和2个chracters之后添加/符号。返回值可以转换为DateTime
public string AddSignToDate(string date)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < date.Length; i++)
{
if (i == 4)
{
sb.Append("/" + date[i]);
}
else if (i == 6)
{
sb.Append("/" + date[i]);
}
else
{
sb.Append(date[i]);
}
}
return sb.ToString();
}