使用 NodaTime 计算两个日期之间的小时数
Calculate the number of hours between two dates using NodaTime
我正在尝试使用 NodaTime 计算两个日期之间的小时数,但出现此异常:
"Units contains time units: Hours. Parameter name: units"
此代码在数年、数月和数天内都可以正常工作。
public ElapsedTimeNodaTime(DateTime StartDate, DateTime EndDate)
{
var birthday = new LocalDate(StartDate.Year, StartDate.Month, Date.Day);
var today = new LocalDate(EndDate.Year, EndDate.Month, EndDate.Day);
Years = Period.Between(birthday, today, PeriodUnits.Years).Years;
Months = Period.Between(birthday, today, PeriodUnits.Months).Months;
Days = Period.Between(birthday, today, PeriodUnits.Days).Days;
Hours = Period.Between(birthday, today, PeriodUnits.Hours).Hours;
}
如果您只有日期,最简单的选择是将天数乘以 24。
或者,创建 LocalDateTime
值:
Hours = Period.Between(birthday.AtMidnight(), today.AtMidnight(), PeriodUnits.Hours).Hours;
或者你可以坚持 LocalDateTime
做所有事情:
public ElapsedTimeNodaTime(DateTime startDate, DateTime endDate)
{
var birthday = startDate.ToLocalDateTime();
var today = endDate.ToLocalDateTime();
Years = Period.Between(birthday, today, PeriodUnits.Years).Years;
Months = Period.Between(birthday, today, PeriodUnits.Months).Months;
Days = Period.Between(birthday, today, PeriodUnits.Days).Days;
Hours = Period.Between(birthday, today, PeriodUnits.Hours).Hours;
}
虽然这似乎有点毫无意义 - 为什么在有天数的情况下冗余地计算小时数?
我正在尝试使用 NodaTime 计算两个日期之间的小时数,但出现此异常:
"Units contains time units: Hours. Parameter name: units"
此代码在数年、数月和数天内都可以正常工作。
public ElapsedTimeNodaTime(DateTime StartDate, DateTime EndDate)
{
var birthday = new LocalDate(StartDate.Year, StartDate.Month, Date.Day);
var today = new LocalDate(EndDate.Year, EndDate.Month, EndDate.Day);
Years = Period.Between(birthday, today, PeriodUnits.Years).Years;
Months = Period.Between(birthday, today, PeriodUnits.Months).Months;
Days = Period.Between(birthday, today, PeriodUnits.Days).Days;
Hours = Period.Between(birthday, today, PeriodUnits.Hours).Hours;
}
如果您只有日期,最简单的选择是将天数乘以 24。
或者,创建 LocalDateTime
值:
Hours = Period.Between(birthday.AtMidnight(), today.AtMidnight(), PeriodUnits.Hours).Hours;
或者你可以坚持 LocalDateTime
做所有事情:
public ElapsedTimeNodaTime(DateTime startDate, DateTime endDate)
{
var birthday = startDate.ToLocalDateTime();
var today = endDate.ToLocalDateTime();
Years = Period.Between(birthday, today, PeriodUnits.Years).Years;
Months = Period.Between(birthday, today, PeriodUnits.Months).Months;
Days = Period.Between(birthday, today, PeriodUnits.Days).Days;
Hours = Period.Between(birthday, today, PeriodUnits.Hours).Hours;
}
虽然这似乎有点毫无意义 - 为什么在有天数的情况下冗余地计算小时数?