有效字符串的日期时间转换失败

时间:2014-03-14 09:59:15

标签: c# asp.net datetime

我有简单的一行代码

var startYearString = DateTime.Parse("03/21/2014").Year;

我希望这可行,但它会抛出这样的错误

System.FormatException was unhandled by user code
HResult=-2146233033
Message=String was not recognized as a valid DateTime.
Source=mscorlib
StackTrace:
    at System.DateTime.Parse(String s)
    at ConnectBLL.usercontrols.users.UserProfile.Page_Load(Object sender, EventArgs e)
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException: 

我不知道出了什么问题?

3 个答案:

答案 0 :(得分:7)

如果您已经知道日期格式,则需要使用DateTime.ParseExact()

试试这个:

 var startYearString = DateTime.ParseExact("03/21/2014","MM/dd/yyyy",
                                  CultureInfo.InvariantCulture).Year;

<强>解释

yyyy - 年份,共4位数字 两个数字MM - dd - 日期两位数

hh - 小时两位数 mm - 分钟两位数 两位数的ss -

fff - 毫秒
tt - AM PM

有关详情,请参阅此处:DateTime custom formats

答案 1 :(得分:2)

尝试

var provider = CultureInfo.InvariantCulture;
var dateString = "03/21/2014";
var format = "d";
var output = DateTime.ParseExact(dateString, format, provider);

答案 2 :(得分:1)

确保您的文化设置为您要解析的类型。

DateTime.Parse("01/23/2014", new CultureInfo("en-US")); // happy
DateTime.Parse("01/23/2014", new CultureInfo("en-GB")); // sad
DateTime.Parse("23/01/2014", new CultureInfo("en-GB")); // happy