2009-06-18 8 views
2

В приведенном ниже коде я передаю функцию sTransactionDate = "1999", и я пытаюсь скрыть ее до даты x/x/1999.Почему DateTime.TryParse возвращает false при задании строки в реальном году?

DateTime dTransactionDate = new DateTime(); 
if(DateTime.TryParse(sTransactionDate, out dTransactionDate)) 
{ //Happy 
}else 
{ //Sad 
} 

Если строка "1999", она всегда будет печальной. Есть идеи?

+3

Где находится остальная часть даты? – Zachary

ответ

14

Попробуйте что-то вроде этого (отрегулировать CultureInfo и DateTimeStyles соответственно):

DateTime.TryParseExact 
    ("1999", 
    "yyyy", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out dTransactionDate) 
+0

Это сработало. Благодаря!!! – Geo

+0

Без проблем - рад помочь! –

2

"1999" не дата, это год попробовать 1/1/1999

+0

Спасибо, вот что я подумал! – Geo

4

Как насчет .. .

DateTime dTransactionDate = new DateTime(); 
if (DateTime.TryParseExact(sTransactionDate, "yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dTransactionDate)) 
{ 
    // Happy 
} 
else 
{ 
    // Sad 
} 

... или даже просто ...

DateTime dTransactionDate = new DateTime(int.Parse(sTransactionDate), 1, 1); 
// Happy 
0

Также проверьте системный календарь, чтобы существовала дата, когда вы пытались разобрать. Точно так же, как вы обнаружите, что «2/29/1949» также вернет false, потому что он никогда не существовал в календаре.