Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 即使我提供了有效的日期格式,字符串也无法识别为有效的日期时间_C#_Wpf_Parsing_Datetime - Fatal编程技术网

C# 即使我提供了有效的日期格式,字符串也无法识别为有效的日期时间

C# 即使我提供了有效的日期格式,字符串也无法识别为有效的日期时间,c#,wpf,parsing,datetime,C#,Wpf,Parsing,Datetime,我正在尝试将字符串转换为DateTime格式,我的string的格式如下: 10.11.2017. 0:00:00 我想把它转换成datetime,如下所示: DateTime expireDate = DateTime.ParseExact(MyFormat, "dd/MM/yyyy HH:mm:ss", null); 我使用HH,因为我使用的是24小时格式 但它抛出了一个错误: String was not recognized as a valid DateTime 我想知道这有什么

我正在尝试将字符串转换为
DateTime
格式,我的
string
的格式如下:

10.11.2017. 0:00:00
我想把它转换成datetime,如下所示:

DateTime expireDate = DateTime.ParseExact(MyFormat, "dd/MM/yyyy HH:mm:ss", null);
我使用HH,因为我使用的是24小时格式

但它抛出了一个错误:

String was not recognized as a valid DateTime

我想知道这有什么问题?我提供了2017年11月10日的格式。我认为DateTime可以接受,但不幸的是,它不是://

您没有使用正确的格式转换它。这应该起作用:

DateTime expireDate = DateTime.ParseExact("10.11.2017. 0:00:00", "dd.MM.yyyy. HH:mm:ss", CultureInfo.InvariantCulture);

不,您没有提供确切的日期格式。您告诉ParseExact期望两位数的小时,但示例仅提供一个0。对于日期部分也是一样,您需要一个/as分隔符,但是您提供了一个带点的字符串

看来你的投入是不确定的。鉴于这种不确定性,我建议使用DateTime.TryParseExact而不是ParseExact。这允许您使用一组可能的输入格式来将解析调整为接收到的确切格式

DateTime expireDate;
string test = "10.11.2017. 0:00:00";
string[] formats = {"dd.MM.yyyy. h:mm:ss", "dd/MM/yyyy. h:mm:ss", 
                    "dd.MM.yyyy. HH:mm:ss", "dd/MM/yyyy. HH:mm:ss"};
bool result = DateTime.TryParseExact(test, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out expireDate);
if (result) 
    Console.WriteLine(expireDate.ToString("dd/MM/yyyy HH:mm:ss"));
不确定这一年后的那一点是否是打字错误。如果输入错误,请将其从上述格式中删除

尝试以下操作:

string s = "10.11.2017. 0:00:00";
DateTime expireDate = DateTime.ParseExact(s, "dd.MM.yyyy. H:mm:ss", CultureInfo.InvariantCulture);

在ParseExact中,格式字符串应与提供的输入完全匹配。您是否尝试将格式从
“dd/MM/yyyy HH:MM:ss”
更改为
“dd.MM.yyyyy.H:MM:ss”
?@MuhammadAhmad Yes,这是正确的格式解决方案*。DateTime没有任何格式。我更新了答案以确保parameter@Fildor是指您回答的第一行,其中您说“将其转换为格式”。您可以将格式化字符串转换为
DateTime
,而不是格式,
DateTime
没有格式。非常抱歉。我的错。我的英语不及格。感谢您的更正为什么您需要一位数/两位数小时的多种格式?
h
说明符将涵盖这两种变体。还有一件事,mate,在某些计算机上,日期写为2017年11月10日,而在某些计算机上,日期写为2017年11月10日[有时斜杠,有时点作为分隔符],那么我如何在那里写精确的解析?在那里最实用的事情是什么?将日期时间转换为字符串(“dd.MM.yyyy”);在不考虑分隔符时间的情况下,在这之后,我可能会使用ParseExact与点连用,而不会出现问题:)是的,在使用ParseExact之前将字符串转换为通用格式。