关于winforms:datetimepicker的NodaTime用法

NodaTime usage for datetimepicker

为了避免出现重复的标签,这里有我所做的一切的简要总结。

在花了几个小时的时间谷歌来计算两个日期之间的差异后,我发现我在这里和这里,我被说服使用nodatime来计算年、月和天的差异。我的应用程序需要准确计算养老金。我使用datetimepicker从表中获取日期值,然后使用Date.cs从这里提取日期值。在dd/mm/year中输入日期,然后将其插入数据库。要用Period.Between(date1, date2, PeriodUnits.Years).Years减去这两个日期,我应该如何将datetimepicker传递给它?

这就是乔恩·斯基特所说的:"你可以使用LocalDateTime.FromDateTime,然后使用Date属性获得LocalDate"。

在数据库中插入时,我应该如何完全摆脱时间,以及在使用datetimepicker而不是Datetime时发现差异。

更新:

1
2
3
4
5
6
7
8
//Date of appointment
var d_app = LocalDateTime.FromDateTime(dateTimePicker1.Value).Date;
//Date of retirement
var d_ret = LocalDateTime.FromDateTime(dateTimePicker2.Value).Date;
var years=Period.Between(d_app,d_ret,PeriodUnits.Years).Years;
var months = Period.Between(d_app, d_ret, PeriodUnits.Months).Months;
var days = Period.Between(d_app, d_ret, PeriodUnits.Days).Days;
MessageBox.Show(years.ToString()+" years"+months.ToString()+"months"+days.ToString()+"days");

把代码datetimepicker1.value作为2/21/1990datetimepicker2.value作为3/09/2015返回25 yrs 300months 9147
days

我做错什么了?


您在这里执行三个单独的计算。您只需要一个:

1
2
3
4
5
var appointment = LocalDateTime.FromDateTime(dateTimePicker1.Value).Date;
var retirement = LocalDateTime.FromDateTime(dateTimePicker2.Value).Date;
var difference = Period.Between(appointment, retirement);
MessageBox.Show(string.Format("{0} years {1} months {2} days",
   difference.Years, difference.Months, difference.Days));