使用 DateTime.TryParseExact 格式化日期字符串并忽略时间

mar*_*dok 1 .net c# datetime datetime-format

我想将字符串日期解析为DateTime但忽略时间。我的预期日期格式M/d/yyyy3/29/2018(不带前导零)。问题是字符串可以有或没有时间部分,时间可以有我无法预测的不同格式。

var inputDateString = "12/31/2017 12:00:00 AM" // false, but I want to parse
var inputDateString = "12/31/2017" // true
DateTime.TryParseExact(inputDateString, "M/d/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate); 
Run Code Online (Sandbox Code Playgroud)

有没有办法解析只有特定日期格式的日期字符串并忽略时间?

Chr*_*way 5

有一个重载TryParseExact允许您传入多种格式。如果您事先知道预期的格式,则可以使用此重载:

void Main()
{
    string[] validFormats = {"M/d/yyyy", "M/d/yyyy hh:mm:ss tt"};

    var inputDateString1 = "12/31/2017 12:00:00 AM"; // false, but I want to parse
    var inputDateString2 = "12/31/2017"; // true

    DateTime.TryParseExact(inputDateString1, validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt1);
    DateTime.TryParseExact(inputDateString2, validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt2);

}
Run Code Online (Sandbox Code Playgroud)

然后,您只能使用该Date属性获取日期部分。