如何将没有填充和分隔符的字符串日期转换为DateTime

时间:2016-12-13 09:51:07

标签: c# .net datetime

这是一个愚蠢的问题。但我有一个没有零填充的字符串日期和任何分隔符如下:

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        ...
        'owner_id' => $data['id'],


    ]);
}

有没有办法使用C#lib或其他任何方式将其转换为日期格式?我不确定最后三位数字,或者是最后一位数字 - 它可以是白天,也可以是最后两位数字。

2 个答案:

答案 0 :(得分:7)

一般情况下,您无法:您自己的示例演示了这一点。 "2016111"是否意味着

2016 Nov 1    // 2016-11-1

2016 Jan 11   // 2016-1-11

从技术上讲,你可以把

  string date = "2016111";

  var result = DateTime.ParseExact(date, 
    "yyyyMd", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeLocal);

获取

   1 Nov 2016

答案 1 :(得分:1)

正如其他人所说,你不能,有时你获得两个有效日期 但也许这种方法对你有用。

public static List<DateTime> ParseAmbiguousDate(string str)
{
    var result = new List<DateTime>();
    DateTime d;

    if (str.Length == 8)
    {
        if (DateTime.TryParseExact(str, "yyyymmdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
        {
            result.Add(d);
            return result;
        }
    }
    else if (str.Length == 7)
    {
        var str1 = str.Insert(4, "0");
        if (DateTime.TryParseExact(str1, "yyyyMdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
        {
            result.Add(d);
        }

        var str2 = str.Insert(6, "0");
        if (DateTime.TryParseExact(str2, "yyyyMdd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out d))
        {
            result.Add(d);
        }
    }

    return result;
}