DateTime.TryParse没有按预期工作

本文关键字:工作 TryParse DateTime | 更新日期: 2023-09-27 17:49:39

我试图得到这个日期字符串09 Apr 2015: 15:16:17以这种格式显示09/04/2015 15:16:17。这是我试过的。

    DateTime dtDateTime = new DateTime();
    string dateString = "09 Apr 2015: 15:16:17";
    DateTime dateValue;
    DateTime.TryParse(dateString, out dateValue);
    dtDateTime = dateValue;

这是输出01/01/0001 00:00:00

我认为TryParse会将dateString值转换为所需的DateTime格式。我做错了什么?

DateTime.TryParse没有按预期工作

你应该这样做:

DateTime dtDateTime = new DateTime();
string dateString = "09 Apr 2015: 15:16:17";
DateTime dateValue;
if (DateTime.TryParseExact(dateString, @"dd MMM yyyy':' HH':'mm':'ss", 
       new CultureInfo("en-us"), DateTimeStyles.None, out dateValue))
    dtDateTime = dateValue;

使用TryParseExact,您可以提供一个自定义日期格式字符串来匹配您的输入日期。在上面的例子中,我在年份之后添加了额外的:

同时,你必须使用一个能理解你的月名的CultureInfo;这里我假设你有一个英文格式的日期。

您需要指定格式,因为它不是标准日期格式字符串:

DateTime.TryParseExact(
    dateString,
    "dd MMM yyyy: HH:mm:ss",
    CultureInfo.CurrentCulture,
    DateTimeStyles.None,
    out dateValue);

此外,您应该检查调用的结果,因为TryParseTryParseExact返回true/false

您可以使用TryParseExact方法:

DateTime.TryParseExact(dateString, "dd MMM yyyy: HH:mm:ss", 
                       System.Globalization.CultureInfo.InvariantCulture,
                       System.Globalization.DateTimeStyles.AllowWhiteSpaces, 
                       out dtDateTime);

提示:

  • 如果您使用MMM,月份将被视为3个字母格式(如Apr)
  • 如果您使用HH而不是HH这意味着小时部分是24小时格式,它将不会失败解析15小时