计算listBox中的日期和当前计算机时钟之间的时间差

时间:2019-11-30 21:52:06

标签: c# date listbox calculation

我想计算listBox中所选行的日期与当前计算机时钟之间的时间差。所选行包含5种类型的不同信息。当我在列表框中选择特定行时,我可以选择使用单选按钮来计算以年月或天为单位的时间差,并通过按 Calculate (计算)按钮在文本框中显示结果。我怎样才能做到这一点?是否可以在listBox的数据中定义日期? enter image description here

2 个答案:

答案 0 :(得分:0)

从listBox中获取选定的项目,并从其文本中获取Date。然后使用DateTime.Parse方法将其设置为DateTime。然后,您只需从DateTime.Now中减去计算出的Date即可获得TimeSpan,在其中您可以获取Days,即天数。您可以通过除以365来计算年数,以30除以月数。或者如果您想更精确地计算,则:

((date1.Year - date2.Year) * 12) + date1.Month - date2.Month

其中date1是实际日期,而date2是从listBoxItem计算得出的。那就是从给定日期过去的月数。

答案 1 :(得分:0)

1。ListBox项是object类型的,因此您可以简单地创建一个这样的类:

public class Item
{
    public string Firstame {get; set;}
    public string Lasttame {get; set;}
    public DateTime Date{get; set;}
    ...

    public override string ToString()
    {
          return $"{Firstname},{LastName},{Date.ToString("yyyy/MM/dd")}";
    }
}

,然后将您的列表框项设置为:

var item = new Item {Name = "Jane", Lastname = "Lambert", Date = DateTime.Now};
Listbox.Items.Add(item);

您将能够获得每个项目的DateTime,例如:

var item = (Item)Listbox.Items[0];
double difference = (DateTime.Now - item.Date).TotalSeconds; // or what ever way you want to calculate it.

2。您可以从列表框中获取字符串,将其转换为DateTime然后进行计算:

string dateStr = listbox.Items[1].ToString().Split(',')[3];
DateTime date = DateTime.ParseExact(dateStr, "yyyy/MM/dd", System.Globalization.CultureInfo.InvariantCulture);
double difference = (DateTime.Now - item.Date).TotalSeconds;

但是我本人会选择选项1,因为您拥有所有属性,而无需拆分,计算和转换。