奇怪的日期时间解析错误

Meh*_*ner 3 c# string datetime

我从字符串解析日期时间有问题 这里DOT NET FIDDLE 这里是我的解析代码

var DateOfBirth2 = DateTime.Parse(string.Format("{0}-{1}-{2}", "1924", "10", "19"));        
Console.WriteLine(DateOfBirth2);
var DateOfBirth = DateTime.Parse(string.Format("{0}-{1}-{2}", "19", "10", "1924"));
Console.WriteLine(DateOfBirth);
Run Code Online (Sandbox Code Playgroud)

问题DateofBirth2可以成功解析,但DateofBirth不能和抛出字符串异常

System.FormatException:String未被识别为有效的DateTime

问题是可以为不同的Visual Studio版本中的两个变量解析完全相同的代码.

什么是解析的最佳方法,错误的原因是什么?

Son*_*nül 5

DateTime.ParseCurrentCulture默认使用设置.

这意味着,您CurrentCultureyyyy-MM-dd标准的日期和时间格式,但它没有dd-MM-yyyy格式.

在这种情况下,您可以使用自定义日期和时间解析DateTime.TryParseExact;

string s = "19-10-1924";
DateTime dt;
if(DateTime.TryParseExact(s, "dd-MM-yyyy", CultureInfo.GetCultureInfo("tr-TR"),
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt);
}
Run Code Online (Sandbox Code Playgroud)

既然你来自土耳其,我认为你CurrentCulturetr-TR(像我一样)你可以找到你文化的所有标准日期和时间格式;

foreach(var format in CultureInfo.GetCultureInfo("tr-TR").DateTimeFormat.
                      GetAllDateTimePatterns())
{
    Console.WriteLine(format);
}
Run Code Online (Sandbox Code Playgroud)

输出将是;

dd.MM.yyyy
dd.MM.yy
yyyy-MM-dd
dd MMMM yyyy dddd
dd MMMM yyyy
dd MMMM yyyy dddd HH:mm
dd MMMM yyyy HH:mm
dd MMMM yyyy dddd HH:mm:ss
dd MMMM yyyy HH:mm:ss
dd.MM.yyyy HH:mm
dd.MM.yy HH:mm
yyyy-MM-dd HH:mm
dd.MM.yyyy HH:mm:ss
dd.MM.yy HH:mm:ss
yyyy-MM-dd HH:mm:ss
dd MMMM
dd MMMM
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
yyyy'-'MM'-'dd'T'HH':'mm':'ss
HH:mm
HH:mm:ss
yyyy'-'MM'-'dd HH':'mm':'ss'Z'
dd MMMM yyyy dddd HH:mm:ss
dd MMMM yyyy HH:mm:ss
MMMM yyyy
MMMM yyyy
Run Code Online (Sandbox Code Playgroud)

正如你可以从输出中看到的,yyyy-MM-dd是标准的日期和时间格式为tr-TR文化,但没有dd-MM-yyyyMM-dd-yyyy格式.