使用c#计算两个日期之间的差异

本文关键字:之间 日期 两个 计算 使用 | 更新日期: 2023-09-27 18:06:12

我正在尝试计算两个日期之间的差异,我的代码在下面给出

DateTime daterenew = DateTime.Parse(drow.ItemArray.GetValue(16).ToString()); //18/01/2017
        DateTime datecurrent = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
        renewstatuslbl.Text = ((daterenew - datecurrent).Days) + " Day(s) remains";

但我收到一个错误

"字符串未被识别为有效的DateTime。">

使用c#计算两个日期之间的差异

我会简化它:

var daterenew = DateTime.ParseExact("18/01/2017", "dd/MM/yyyy", CultureInfo.InvariantCulture);
var res = ((daterenew - DateTime.Today).Days) + " Day(s) remains";

注意,DateTime.Now!=CCD_ 2。

试试这样的

string dateString = drow.ItemArray.GetValue(16).ToString();
DateTime daterenew = DateTime.ParseExact(dateString, "dd/MM/yyyy", CultureInfo.InvariantCulture); 
renewstatuslbl.Text = string.Format("{0} Day(s) remains", (daterenew - DateTime.Now).TotalDays);

想法是在ParseExact中,在那里你可以为你的约会设置drow格式。ItemArray另请查看TotalDays

假设您的drow.ItemArray.GetValue(16).ToString()格式始终为dd/MM/yyyy。使用ParseExact

        DateTime daterenew = DateTime.ParseExact(drow.ItemArray.GetValue(16).ToString(), "dd/MM/yyyy", null); //18/01/2017
        //DateTime datecurrent = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
        DateTime datecurrent = DateTime.Now;
        renewstatuslbl.Text = ((daterenew - datecurrent).Days) + " Day(s) remains";
日期的格式会导致错误。18/01/2017https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110(.aspx

示例我使用"yyyy/MM/dd"

//DateTime daterenew = DateTime.Parse("18/01/2017"); //18/01/2017
DateTime daterenew = DateTime.Parse("2017.01.18"); //18/01/2017
DateTime datecurrent = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
object renewstatuslbl = ((daterenew - datecurrent).Days) + " Day(s) remains";

因此,我认为您可以在插入到drow.ItemArray

之前先更改字符串日期格式
enter codenamespace FineCalculation

{公共分部类Form1:Form{公共窗体1(({InitializeComponent((;}

    private void button1_Click(object sender, EventArgs e)
    {
        DateTime date01 = date1.Value;
        DateTime date02 = date2.Value;
        TimeSpan timeSpan = date02 - date01;
        int days = Convert.ToInt16(timeSpan.TotalDays);
        double fine = 0;
        if(days < 30)
        {
            fine = days * 0.5;
        }else if(days > 30 && days < 60)
        {
            fine = days * 0.5 * 0.75;
        }else if(days > 60)
        {
            fine = days * 0.5 * 0.75 * 1;
        }

        MessageBox.Show("For "+ days + " days fine is " + fine.ToString());
    }
}

}此处