我正在使用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();
此代码在我的系统上工作正常,值如下图所示:
在上图中,时间部分为00:00:00。
但问题是在运行Windows Server 2003 R2的测试服务器中部署相同的代码后,两个日期之间的差异出错了。假设08-02-2012和07-02-2012之间的差异是1,但在测试服务器上它是31.我使用完全相同的代码。
这是测试服务器的图像:
根据图像,时间值为12:00:00。可能是什么原因造成的?
答案 0 :(得分:2)
我认为这是因为日期格式化(本地化)。在您的计算机中08-02-2012
表示February 8th
(dd-MM-yyyy
)和07-02-2012
为February 7th
,因此差异为一天。在服务器上,这被解释为August 2nd
和July 2nd
(MM-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.ToDateTime
与DateTime.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()。