求教: DateTime.Parse和 Convert.ToDateTime算出的结果不对

zhengchao40312018 2011-04-13 11:02:57
最近,在做项目时,发现有个DateTime.ParseExact很强大,但是就是不知道最后一个参数怎么用,做了一个小工具来测试,发现了它计算出来的时间差 与 用 DateTime.Parse和 Convert.ToDateTime算出的结果不一样,请教各位高手,这是怎么回事?

下面是我的测试代码:
很简单,一个多行文本区 txbMsg
一个"开始测试按钮": button1
主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
string begin_date = "2011/04/12 00:20:43";
string last_date = "12/04/2011 00:25:27";

try
{
TimeSpan ts1 = DateTime.ParseExact(begin_date, "yyyy/MM/dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture) - DateTime.ParseExact(last_date, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture);
txbMsg.Text += "DateTime.ParseExact(\"" + begin_date + "\", \"yyyy/MM/dd HH:mm:ss\", System.Globalization.CultureInfo.CurrentCulture) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", System.Globalization.CultureInfo.CurrentCulture) passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) +"\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "DateTime.ParseExact(\"" + begin_date + "\", \"yyyy/MM/dd HH:mm:ss\", System.Globalization.CultureInfo.CurrentCulture) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", System.Globalization.CultureInfo.CurrentCulture) failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";

try
{
TimeSpan ts1 = DateTime.ParseExact(begin_date, "yyyy/MM/dd HH:mm:ss", null) - DateTime.ParseExact(last_date, "dd/MM/yyyy HH:mm:ss", null);
txbMsg.Text += "DateTime.ParseExact(" + begin_date + ", \"yyyy/MM/dd HH:mm:ss\", null) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", null) passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) + "\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "DateTime.ParseExact(\"" + begin_date + "\", \"yyyy/MM/dd HH:mm:ss\", null) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", null) failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";

try
{
TimeSpan ts1 = DateTime.ParseExact(begin_date, "yyyy/MM/dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) - DateTime.ParseExact(last_date, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
txbMsg.Text += "DateTime.ParseExact(\"" + begin_date + "\", \"yyyy/MM/dd HH:mm:ss\", System.Globalization.CultureInfo.InvariantCulture) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", System.Globalization.CultureInfo.InvariantCulture) passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) + "\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "DateTime.ParseExact(\"" + begin_date + "\", \"yyyy/MM/dd HH:mm:ss\", System.Globalization.CultureInfo.InvariantCulture) - DateTime.ParseExact(\"" + last_date + "\", \"dd/MM/yyyy HH:mm:ss\", System.Globalization.CultureInfo.InvariantCulture) failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";

try
{
TimeSpan ts1 = DateTime.Parse(begin_date, System.Globalization.CultureInfo.InvariantCulture) - DateTime.Parse(last_date, System.Globalization.CultureInfo.InvariantCulture);
txbMsg.Text += "DateTime.Parse(\"" + begin_date + "\", System.Globalization.CultureInfo.InvariantCulture) - DateTime.Parse(\"" + last_date + "\", System.Globalization.CultureInfo.InvariantCulture) passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) + "\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "DateTime.Parse(\"" + begin_date + "\", System.Globalization.CultureInfo.InvariantCulture) - DateTime.Parse(\"" + last_date + "\", System.Globalization.CultureInfo.InvariantCulture) failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";

try
{
TimeSpan ts1 = DateTime.Parse(begin_date) - DateTime.Parse(last_date);
txbMsg.Text += "DateTime.Parse(\"" + begin_date + "\") - DateTime.Parse(\"" + last_date + "\") passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) + "\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "DateTime.Parse(\"" + begin_date + "\") - DateTime.Parse(\"" + last_date + "\") failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";


try
{
TimeSpan ts1 = Convert.ToDateTime(begin_date) - Convert.ToDateTime(last_date);
txbMsg.Text += "Convert.ToDateTime(\"" + begin_date + "\") - Convert.ToDateTime(\"" + last_date + "\") passed\r\n";
txbMsg.Text += Convert.ToInt32(ts1.TotalSeconds) + "\r\n";
}
catch (Exception ex)
{
txbMsg.Text += "Convert.ToDateTime(\"" + begin_date + "\") - Convert.ToDateTime(\"" + last_date + "\") failed\r\n";
txbMsg.Text += ex.Message;
}

txbMsg.Text += "\r\n";
}


测试结果为:

DateTime.ParseExact("2011/04/12 00:20:43", "yyyy/MM/dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture) - DateTime.ParseExact("12/04/2011 00:25:27", "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture) passed
-284
DateTime.ParseExact(2011/04/12 00:20:43, "yyyy/MM/dd HH:mm:ss", null) - DateTime.ParseExact("12/04/2011 00:25:27", "dd/MM/yyyy HH:mm:ss", null) passed
-284
DateTime.ParseExact("2011/04/12 00:20:43", "yyyy/MM/dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) - DateTime.ParseExact("12/04/2011 00:25:27", "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) passed
-284
DateTime.Parse("2011/04/12 00:20:43", System.Globalization.CultureInfo.InvariantCulture) - DateTime.Parse("12/04/2011 00:25:27", System.Globalization.CultureInfo.InvariantCulture) passed
-20390684
DateTime.Parse("2011/04/12 00:20:43") - DateTime.Parse("12/04/2011 00:25:27") passed
-20390684
Convert.ToDateTime("2011/04/12 00:20:43") - Convert.ToDateTime("12/04/2011 00:25:27") passed
-20390684
请教各位高手,这是怎么一回来
...全文
220 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧