2012-02-14 51 views
2

我的工作在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。這可能是什麼原因?

+0

您的服務器設置爲不同的定位是日期字符串定義爲MM/DD/YYYY,而不是DD/MM/YYYY – 2012-02-14 06:18:18

+0

嘗試使用** ** dt.ToShortDateString什麼 – sharad 2012-02-14 06:19:47

+0

是處理這種情況的最好方法是什麼?請建議?我的日期格式是:Format =「dd/MM/yyyy」。 – Tarun 2012-02-14 06:27:10

回答

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); 
+0

對問題的很好解釋。 OP如何解決它? – dtb 2012-02-14 06:26:02

+0

處理這種情況的最佳方法是什麼?請建議?我的日期格式是:Format =「dd/MM/yyyy」。 – Tarun 2012-02-14 06:27:19

+0

@dtb:謝謝。更新了答案。 – Kamyar 2012-02-14 06:37:12

2

而不是做Convert.ToDateTime使用DateTime.TryParseCultureInfo的。問題可能出在服務器上,Culture與本地機器不同。

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")); 

這將工作一樣在所有的機器。

希望這可以解決您的問題。

+0

謝謝。現在它在測試服務器上正常工作。 – Tarun 2012-02-14 06:58:39

0

兩個系統報告的不同格式的同一時間。您的系統以24小時格式(00:00:00)報告時間,測試服務器使用12小時格式(上午12:00:00)。出於計算目的,日期是相同的。如果您需要特定的輸出格式,請使用DateTime.Format()。