2013-08-21 71 views
10

下面的代碼塊中的方法TryParseExact返回true
我想知道爲什麼。
我認爲這個日期"2013.03.12"是無效的,因爲這不是由斜線分隔,而是點。TryParseExact返回false,但我不知道爲什麼

當我將CultureInfo"de-De"更改爲"en-US"後,該方法返回false。這可能是一個暗示,但我仍然不知道爲什麼會發生這種情況。

var format = new string[] { "yyyy/MM/dd" }; 
var parsed = new DateTime(); 
var result = DateTime.TryParseExact("2013.03.12", format, 
      new CultureInfo("de-DE"), DateTimeStyles.None, out parsed); 
+0

BTW:'2013.03.12'不是有效的/一般德國日期格式。 '12.03.2013'會。 –

回答

17

我覺得你目前DateSeparator.(點)和/全自動本身替換它。

/分隔符有特殊的意義「與當前區域性的日期分隔符代替我

CultureInfo c = new CultureInfo("de-DE"); 
Console.WriteLine(c.DateTimeFormat.DateSeparator); //Prints . (dot) 

看看The "/" Custom Format Specifier

+3

非常有趣,不知道 –

+0

@lazyberezovsky是的,我沒有意識到這一點,因爲蒂姆Schmelter [點](http://stackoverflow.com/questions/17526239/converting-datetime-to-string/17526314 #comment25485437_17526239)這種情況差不多一個月前。 –

+1

非常感謝。有時候,我不必在本規範中按國家定義格式。 – Nigiri

7

由於@Soner格尼爾points out,將/被視爲「日期分隔符」在custom format strings。如果你想只接受/字符,你需要轉義:

var format = new string[] { @"yyyy\/MM\/dd" }; 
+3

A @請在「 – xanatos

+0

@xanatos之前 - 好的趕上。 –