如何将YYYYMMDD值转换为DateTime?

时间:2016-12-22 21:34:03

标签: c# parsing datetime

这不应该被视为一个重复的问题,因为我尝试了在其他地方给出的答案,但它仍然无效。

例如,有了这个:

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"

?!

2 个答案:

答案 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();
    }