Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.TryParse未按预期工作_C#_Datetime_Tryparse - Fatal编程技术网

C# DateTime.TryParse未按预期工作

C# DateTime.TryParse未按预期工作,c#,datetime,tryparse,C#,Datetime,Tryparse,我正在尝试将此日期字符串2015年4月9日:15:16:17以此格式显示2015年4月9日15:16:17。这就是我尝试过的 DateTime dtDateTime = new DateTime(); string dateString = "09 Apr 2015: 15:16:17"; DateTime dateValue; DateTime.TryParse(dateString, out dateValue); dtDateTime = date

我正在尝试将此日期字符串2015年4月9日:15:16:17以此格式显示2015年4月9日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 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);

此外,您应该检查调用的结果,因为
TryParse
TryParseExact
返回
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小时时不会失败

TryParse
也会返回
true
false
,这取决于它是否成功,我想你会在这里发现它返回
false
。我想
在一年后就要扔掉了。查看
DateTime.ParseExact
)您可能需要
TryParseExact
和格式字符串将其更改为日期
TryParse
我想只能尝试使用当前的区域性格式。@DLeh,啊,是的!也许结肠就是问题所在。我无法编辑输入的字符串,因此我将查看DateTime.ParseExact。谢谢你。@Adamhuldsworth,这不对。这两个函数都接受一个IFormatProvider,您可以将要使用的区域性传递给该提供程序。如果您比我快,+1
CultureInfo。CurrentCulture
在任何情况下都不起作用;对于英文名称,您应该提供
CultureInfo.InvariantCulture
或一些与英文相关的CultureInfo