在NodaTime中使用不在午夜开始的日子

时间:2013-11-18 16:48:28

标签: c# datetime nodatime

我正在开发一个有火车时刻表的应用程序,其中第一列火车在0400离开而最后一列火车在0200离开。因此,该应用程序的用户处理从0300开始到0300结束的天数。换句话说,当他们说“星期三的火车在0200”,他们的意思是“火车于周四0200离开”。

我们的应用程序需要存储所有在周三(例如)周三离开的列车,这意味着它不应包括0300之前离开的列车,但它应包括第二天离开的列车,直到0300.

如果不生气,我如何在应用程序中表示这一点?如何将其存储在数据库中以便于查询?

1 个答案:

答案 0 :(得分:2)

我会存储实际的日期/时间值。然后查询,搜索“星期三的任何东西”,你将从0400(包括)周三到0400(星期四)(独家)。

就显示而言,您可能最好选择日期,如果时间早于某个截止日期,则减去一天:

private static readonly LocalTime CutOff = new LocalTime(4, 0, 0);

...
LocalDate date = dateTime.Date;
if (dateTime.TimeOfDay < CutOff)
{
    date = date.PlusDays(-1);
}
var dayOfWeek = date.IsoDayOfWeek;

我会尽量避免自己使用日期,以免发疯。任何日期/时间都是明确的。