我有一个接受格式的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
}
请有人在这里纠正我。
答案 0 :(得分:8)
hh
适用于01
到12
。
使用HH
代替00
到23
。
例如;
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的评论:1和2。使用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);