[英]Unexpected number of days between two dates
我正在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的測試服務器中部署了相同的代碼后,兩個日期之間的差錯了。 假設2012年8月2日與2012年7月2日之間的差異為1,但在測試服務器上為31。我使用的是完全相同的代碼。
這是測試服務器的圖像:
根據圖像,時間值為12:00:00。 這可能是什么原因?
我認為是因為日期格式(本地化)。 在您的計算機08-02-2012
指February 8th
( dd-MM-yyyy
)和07-02-2012
為February 7th
,因此不同的是一天。 在服務器上,這被解釋為August 2nd
July 2nd
和July 2nd
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);
代替執行Convert.ToDateTime
將DateTime.TryParse
與CultureInfo
一起使用。 問題可能出在服務器上文化與本地計算機不同。
要么
您可以使用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"));
這將在所有計算機上相同。
希望這能解決您的問題。
這兩個系統以不同的格式同時報告時間。 您的系統以24小時制(00:00:00)報告時間,而測試服務器使用12小時制(12:00:00 AM)。 出於計算目的,日期是相同的。 如果在輸出上需要特定的格式,請使用DateTime.Format()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.