将字符串值解析为DateTime对象?

Man*_*der 1 c# asp.net string datetime

我有一个接受格式的DataTime字符串的文本框:MM/dd/yyyy hh:mm:ss.例如 :

假设我选择了一个日期时间: "12/26/2013 17:37:03"

我试图使用以下方法获取Datetime对象:

DateTime.TryParseExact(strDate, "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None,out date);
Run Code Online (Sandbox Code Playgroud)

但每次它将字符串解析为:{ 1/1/0001 12:00:00 AM}

请有人在这里纠正我.

Son*_*nül 8

hh0112.

使用HH而不是这是0023.

例如;

string s = "12/26/2013 17:37:03";
DateTime dt = DateTime.Now;
bool success = DateTime.TryParseExact(s, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
Console.WriteLine("Is Parsing Successful? {0}", success);
Console.WriteLine(dt);
Run Code Online (Sandbox Code Playgroud)

输出将是;

Is Parsing Successful? True
12/26/2013 5:37:03 PM
Run Code Online (Sandbox Code Playgroud)

这里一个demonstration.

但即使你解析,为什么你仍然得到一个DateTime值?

DateTime.TryParseExact方法

如果s中存在日期,时间和时区元素,则它们也必须按格式指定的顺序出现.如果format定义了一个没有time元素的日期并且解析操作成功,则生成的DateTime值的时间为午夜(00:00:00).

注意:请阅读ken2k的评论:12.当您date使用默认值定义时DateTime date; 您无法知道转换是否成功,因为这两者都会生成DateTime(1/1/0001 12:00:00 AM)的默认值

  • DateTime date 把日期作为 1/1/0001 12:00:00 AM
  • 如果你的解析失败,date也会1/1/0001 12:00:00 AM

这就是为什么,我在我的代码中更改它DateTime dt = DateTime.Now;,您可以检查您的转换是否成功.如果成功,您的date意愿将是12/26/2013 17:37:03,如果不成功,您的日期将是1/1/0001 12:00:00 AM

  • 除了你的答案之外,值得一提的是使用TryParseXXXX意味着检查返回的布尔值.1/1/0001是日期时间的默认值,但不应用于测试解析方法是否成功.没有`if(... == true/false)`的TryParseXXX不应该存在. (2认同)