簡體   English   中英

兩個日期之間的天數超出預期

[英]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-2012February 8thdd-MM-yyyy )和07-02-2012February 7th ,因此不同的是一天。 在服務器上,這被解釋為August 2nd July 2ndJuly 2nd August 2nd July 2ndMM-dd-yyyy )。 因此相差31天。
以下是解決問題的代碼段:( 未測試

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

代替執行Convert.ToDateTimeDateTime.TryParseCultureInfo一起使用。 問題可能出在服務器上文化與本地計算機不同。

要么

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM