簡體   English   中英

計算兩個日期(天數)之間的差異?

[英]Calculate difference between two dates (number of days)?

我看到這個問題已經回答了JavaJavaScriptZ2FEC392304A5C23AC138DA22847F9BDB7CZ ,但不是 ZD7745ZEFA19FBE7236 那么,如何計算 C# 中兩個日期之間的天數?

假設StartDateEndDate的類型為DateTime

(EndDate - StartDate).TotalDays

最佳答案是正確的,但是如果您只想將整天作為 int 並且願意放棄日期的時間部分,請考慮:

(EndDate.Date - StartDate.Date).Days

再次假設StartDateEndDateDateTime類型。

使用 TimeSpan object 這是日期減法的結果:

DateTime d1;
DateTime d2;
return (d1 - d2).TotalDays;

我認為這會做你想要的:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(-1);

TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;
DateTime xmas = new DateTime(2009, 12, 25);
double daysUntilChristmas = xmas.Subtract(DateTime.Today).TotalDays;
// Difference in days, hours, and minutes.

TimeSpan ts = EndDate - StartDate;

// Difference in days.

int differenceInDays = ts.Days; // This is in int
double differenceInDays= ts.TotalDays; // This is in double

// Difference in Hours.
int differenceInHours = ts.Hours; // This is in int
double differenceInHours= ts.TotalHours; // This is in double

// Difference in Minutes.
int differenceInMinutes = ts.Minutes; // This is in int
double differenceInMinutes= ts.TotalMinutes; // This is in double

您還可以獲得秒、毫秒和滴答聲的差異。

如果有人想要將整天數作為雙精度( ab類型為DateTime ):

 (a.Date - b.Date).TotalDays

在計算兩個日期之間的天數時,通常會就時間(小時)進行辯論。 對問題的回答和他們的評論也不例外。

考慮到StartDateEndDate的類型是DateTime :如果性能不是問題,我強烈建議您通過中間轉換記錄您的計算。 例如, (EndDate - StartDate).Days不直觀,因為舍入取決於StartDateEndDate的小時部分。

  • 如果您希望以天為單位的持續時間包括天數,那么就像已經建議的那樣使用(EndDate - StartDate).TotalDays
  • 如果您希望持續時間反映兩天之間的距離,請使用(EndDate.Date - StartDate.Date).Days
  • 如果您希望持續時間反映開始日期早上和結束日期晚上之間的持續時間(您通常在項目管理軟件中看到的),請使用(EndDate.Date - StartDate.Date).Days + 1

你可以試試這個

EndDate.Date.Subtract(DateTime.Now.Date).Days

使用時間跨度可以解決問題,因為它具有許多屬性:

DateTime strt_date = DateTime.Now;
DateTime end_date = Convert.ToDateTime("10/1/2017 23:59:59");
//DateTime add_days = end_date.AddDays(1);
TimeSpan nod = (end_date - strt_date);
Console.WriteLine(strt_date + "" + end_date + "" + "" + nod.TotalHours + "");
Console.ReadKey();

對於ab作為兩種DateTime類型:

DateTime d = DateTime.Now;
DateTime c = DateTime.Now;
c = d.AddDays(145);
string cc;
Console.WriteLine(d);
Console.WriteLine(c);
var t = (c - d).Days;
Console.WriteLine(t);
cc = Console.ReadLine();

對於像我這樣的初學者,他們會在簡單的一行中偶然發現這個小問題,並將示例轉換為int

int totalDays = Convert.ToInt32((DateTime.UtcNow.Date - myDateTime.Date).TotalDays);

這將計算從今天 (DateTime.UtcNow.Date) 到所需日期 (myDateTime.Date) 的總天數。

如果 myDateTime 是昨天或比今天更早的日期,這將給出正 (+) integer 結果。

另一方面,如果 myDateTime 是明天或未來日期,由於加法規則,這將給出負 (-) integer 結果。

快樂編碼^_^

首先聲明一個稍后會返回的 class:

public void date()
{
    Datetime startdate;
    Datetime enddate;
    Timespan remaindate;

    startdate = DateTime.Parse(txtstartdate.Text).Date;
    enddate = DateTime.Parse(txtenddate.Text).Date;

    remaindate = enddate - startdate;

    if (remaindate != null)
    {
        lblmsg.Text = "you have left with " + remaindate.TotalDays + "days.";
    }
    else
    {
        lblmsg.Text = "correct your code again.";
    }
}

protected void btncal_Click(object sender, EventArgs e)
{
    date();
}

使用按鈕控件調用上面的class。 這是一個例子:

獲取兩個日期之間的差異,然后從以下位置獲取日期:

int total_days = (EndDate - StartDate).TotalDays

您可以使用以下代碼:

 int DateDifInSecond = EndDate.Subtract(StartDate).TotalSeconds

試試這個真正有效的獲取實際天數差異。 日期格式為“dd/MM/yyyy”

  string[] d1 = txtFromDate.Values.Split('/');
  string[] d2 = txtToDate.Values.Split('/');

  DateTime FrmDt = new DateTime(Convert.ToInt32(d1[2]), Convert.ToInt32(d1[1]), Convert.ToInt32(d1[0]));
  DateTime ToDt = new DateTime(Convert.ToInt32(d2[2]), Convert.ToInt32(d2[1]), Convert.ToInt32(d2[0]));

  TimeSpan TDiff = ToDt.Subtract(FrmDt);
  String DaysDiff = TDiff.TotalDays.ToString();
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
    DateTime d = Calendar1.SelectedDate;
    // int a;
    TextBox2.Text = d.ToShortDateString();
    string s = Convert.ToDateTime(TextBox2.Text).ToShortDateString();
    string s1 =  Convert.ToDateTime(Label7.Text).ToShortDateString();
    DateTime dt = Convert.ToDateTime(s).Date;
    DateTime dt1 = Convert.ToDateTime(s1).Date;
    if (dt <= dt1)
    {
        Response.Write("<script>alert(' Not a valid Date to extend warranty')</script>");
    }
    else
    {
        string diff = dt.Subtract(dt1).ToString();
        Response.Write(diff);
        Label18.Text = diff;
        Session["diff"] = Label18.Text;
    }
}   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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