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

时间:2013-12-30 12:15:21

标签: 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);

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

请有人在这里纠正我。

4 个答案:

答案 0 :(得分:8)

hh适用于0112

使用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);

输出将是;

Is Parsing Successful? True
12/26/2013 5:37:03 PM

这里有 demonstration

但即使您解析,为什么还会得到DateTime值?

来自DateTime.TryParseExact method

  

如果s中存在日期,时间和时区元素,则它们也必须存在   按格式指定的顺序出现。如果格式定义日期   没有时间元素和解析操作成功,结果   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

答案 1 :(得分:0)

除了其他人已经注意到的小时问题。为什么要使用不变的文化?您的示例中的日期时间是美国。

答案 2 :(得分:0)

您的时间是24小时格式。因此,您需要使用HH(用于24小时格式)而不是hh(用于12小时格式)。

DateTime.TryParseExact(strDate, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None,out date);
  

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

这意味着您的解析失败了。在继续进行之前,您需要检查解析的result。你可以像下面这样做。

if(DateTime.TryParseExact(strDate, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None,out date))
{
     //Parsing successful
}
else
{
     //Parsing failed
}

答案 3 :(得分:0)

答案:

var TimeIn = Application.Current.Properties["date"].ToString();
DateTime InTime = DateTime.ParseExact(TimeIn, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);