【问题标题】:Calculate the number of hours between two dates using NodaTime使用 NodaTime 计算两个日期之间的小时数
【发布时间】:2018-01-06 04:20:30
【问题描述】:

我正在尝试使用 NodaTime 来计算两个日期之间的小时数,但我得到了这个异常:

"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;
}

【问题讨论】:

  • 旁注:我建议遵循 .NET 的参数命名约定。您也可以使用var birthday = LocalDateTime.FromDateTime(StartDate).Date; 或(在 2.0 中使用扩展方法)var birthday = StartDate.ToLocalDateTime().Date;

标签: c# nodatime


【解决方案1】:

如果您刚刚得到日期,最简单的选择是将天数乘以 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;
}

但这似乎有点毫无意义 - 为什么在有时间的情况下重复计算小时数?

【讨论】:

  • 好点。感谢您的回复。
  • 除了冗余之外,似乎它还会改变上下文。我的意思是,如果有人谈论“他们的生日以来的几个小时”,人们会认为出生的时间和时区突然变得相关。
  • @MattJohnson:可能,是的——尽管我猜这是一个被断言没问题的作业。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多