2015-09-03 113 views
1

我有以下代码。我想要做的是如果它是一个空值的日期返回NULL或返回短日期。例如:12/12/15。我得到一个错误:将字符串转换为shortdate时间

When converting a string to DateTime parse the string to take the date before putting each variable into the DateTime Object.

public DateTime? StrToDate(string val) 
{  
    DateTime? dt = string.IsNullOrEmpty(val) 
     ? (DateTime?)null 
     : DateTime.ParseExact(val, "MM/dd/yyyy", null);  
    return dt; 
} 
+0

你传递给函数的字符串是什么? – JoaoFSA

+2

首先,你究竟在哪里得到那个错误?这并非我见过的错误。其次,你在一年中传递2位数字,但解析方法显式寻找4。 – DavidG

回答

2

多一点前途的解决方案是使用TryParseExact()。 TryParseExact或ParseExact的情况也是,它只接受提供的字符串格式以将其解析为DateTime。

public static DateTime? StrToDate(string val) 
    { 
     CultureInfo enUS = new CultureInfo("en-US"); 
     DateTime dateValue; 
     if (DateTime.TryParseExact(val, "MM/dd/yyyy", enUS, 
            DateTimeStyles.AllowWhiteSpaces, out dateValue)) 
     { 
      return (dateValue); 
     } 
     else 
     { 
      return null; 
     } 
    } 

现在测试用例是这样的:

 // Valid date 
     var date = StrToDate("05/01/2000"); 

     // Null 
     var nulldateFromEmpty = StrToDate(string.Empty); 

     // Null 
     var nullDateFromNullString = StrToDate(null); 

更新:如果你希望确切地恢复的情况下“15年12月12日”,则DateTime对象表示与结构所有日期和时间字段,所以即使从ShortDateTime字符串(12/12/15)解析值,该对象仍然具有时间的默认值,即“12:00:00 AM”。要转换这些值可以再次调用var date = StrToDate("05/01/2015").Value.ToString("MM/dd/yy");

-1

试试这个:

VAR日期时间= Convert.ToDateTime( “1992年11月25日”);

return datetime.ToShortDateString();