两个日期之间的意外天数

时间:2012-02-14 06:13:52

标签: c# datetime

我正在使用Windows 7操作系统并使用以下代码计算两天之间的天数:

DateTime dt = Convert.ToDateTime(txtNewIDDtAccRej.Text);
DateTime dtt = Convert.ToDateTime(txtNewIDDtInternal.Text);

TimeSpan t = dt - dtt;
txtNewProcessTime.Text = Convert.ToInt32(t.TotalDays).ToString();

此代码在我的系统上工作正常,值如下图所示:

Image1

在上图中,时间部分为00:00:00。

但问题是在运行Windows Server 2003 R2的测试服务器中部署相同的代码后,两个日期之间的差异出错了。假设08-02-2012和07-02-2012之间的差异是1,但在测试服务器上它是31.我使用完全相同的代码。

这是测试服务器的图像:

Image of Test Server

根据图像,时间值为12:00:00。可能是什么原因造成的?

3 个答案:

答案 0 :(得分:2)

我认为这是因为日期格式化(本地化)。在您的计算机中08-02-2012表示February 8thdd-MM-yyyy)和07-02-2012February 7th,因此差异为一天。在服务器上,这被解释为August 2ndJuly 2ndMM-dd-yyyy)。所以差异是31天 以下是解决问题的片段:(未经过测试

 CultureInfo en = new CultureInfo("en-US");
 var format = "dd/MM/yyyy";
 DateTime myDate =  DateTime.ParseExact(myDateStr,format,en.DateTimeFormat);

答案 1 :(得分:2)

而不是Convert.ToDateTimeDateTime.TryParse一起使用CultureInfo。问题可能出在服务器上。文化与本地计算机不同。

OR

您可以使用DateTime.ParseExact。您也可以在此处指定日期格式。阅读更多@ MSDN

你可以试试这个

string s = "08-02-2012";
string format ="dd-MM-yyyy";
//Get DateTime
DateTime dateTime = DateTime.ParseExact(s, format,new System.Globalization.CultureInfo("en-US"));
//Get string representation of DateTime
string date = dateTime.ToString(format, new System.Globalization.CultureInfo("en-US"));

这在所有机器上都一样。

希望这能解决您的问题。

答案 2 :(得分:0)

这两个系统以不同的格式同时报告。您的系统以24小时格式(00:00:00)报告时间,测试服务器使用12小时格式(12:00:00 AM)。出于计算目的,日期是相同的。如果在输出上需要特定格式,请使用DateTime.Format()。